为什么这些定义都ok:
int func(int p=255) {
return p;
}
int func1(const int &p=255) {
return p;
}
但是这个定义:
int func2(int &p=255) {
return p;
}
导致编译错误?
背后的逻辑是什么?
最佳答案
通过引用获取参数意味着,您不使用变量的本地拷贝,而是使用已在调用函数范围内定义的变量。
虽然您的第一个示例很有意义(您有一个可以用默认值填充的局部变量 p),但第二个示例有点棘手:通常在使用引用时您希望变量有一个地址,因为您想要修改它。对于常量引用,编译器仍然允许您传递文字,即使“对文字的引用”之类的东西根本没有意义。
在第三种情况下,编译器希望您修改 p。但是这个修改应该影响内存的哪一部分呢? “255”没有地址 - 因此不能用作引用。
如果您想获得更详细的解释,您可能应该寻找“右值”和“左值”等关键字。
关于c++ - 为什么不能给非常量引用赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35381684/