const關鍵字修飾左值引用的2個作用
阿新 • • 發佈:2018-12-12
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!” 傳遞給 printStringL和printStringLR函式,會構造出一個臨時的 string
物件。
總結
const
修飾左值引用型別時(const Type &
),作用有兩個:
- 不能通過該引用變數修改被引用的物件;
- 該引用變數既可引用一個左值,也可引用一個右值(字面值或臨時物件)。
所以,當 const
修飾函式形參中的左值引用時,表示該形參既可接受一個左值亦可接受一個右值。