c++ - 为什么不能给非常量引用赋值?

标签 c++

为什么这些定义都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/

相关文章:

c++ - 创建相机以旋转立方体不起作用

c++ - STL 删除没有按预期工作?

c++ - 根据某个功能是否存在启用模板

c++ - 指针 vector 的 Push_back 方法导致 C++ 崩溃

c++ - MSDN HMAC-SHA1 示例不工作

c++ - 该对象具有与覆盖 draw 的成员函数 sfml 不兼容的类型限定符

c++ - 引用类型和继承问题

c++ - 在文件之间共享运行时变量

c++ - 如何调用 boost::variant 的特定构造函数

c++ - 以编程方式创建 32 位颜色图标