1. 程式人生 > >const關鍵字修飾左值引用的2個作用

const關鍵字修飾左值引用的2個作用

const 在函式形參中的作用

首先看下面的例子:

#include <string>
#include <iostream>

void printStringL(std::string &str) {
	std::cout << str << std::endl;
}

void printStringLR(const std::string &str) {
	std::cout << str << std::endl;
}
int main() {
	printStringL("hello world!"
); // error printStrinfgLR("hello world!"); // ok return 0; }

執行上面程式,會發現編譯錯誤,看完下面,應該就能理解為什麼了。

const在函式形參中的第一個作用想必很多人都知道,就是為了設定被修飾的變數為只讀狀態(即不允許被修改)。但是應該有挺多人忽略了其第二個作用。

其第二作用就如同上面例子中的 printStringLR 函式,當const 修飾一個左值引用(型如const Type &)時,表示該左值引用既可以引用一個左值,也可以引用一個右值(字面值或臨時物件),而不帶 const修飾的左值引用(型如Type &

)只能引用一個左值,不能引用一個右值。

所以,當 const 修飾函式形參中的左值引用型別時,表示該左值引用既可以引用一個左值,也可以引用一個右值,如printStringLR函式;而沒加const的左值引用形參,只能接受一個左值,如 printStringL函式。

注:將 “hello world!” 傳遞給 printStringLprintStringLR函式,會構造出一個臨時的 string物件。

總結

const 修飾左值引用型別時(const Type &),作用有兩個:

  • 不能通過該引用變數修改被引用的物件;
  • 該引用變數既可引用一個左值,也可引用一個右值(字面值或臨時物件)。

所以,當 const 修飾函式形參中的左值引用時,表示該形參既可接受一個左值亦可接受一個右值。