文章目录
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
修饰函数形参中的左值引用时,表示该形参既可接受一个左值亦可接受一个右值。