c++ - 为什么会这样编译?期待 "cannot assign a constant to a non-const reference"

标签 c++

面试官给我看了这样的代码,问我是否可以编译,并给出我的推理。我非常肯定地告诉他它不会编译,因为 10 是一个常量,你不能将一个常量分配给一个非常量引用(比如 int& b = 10 不会编译),而且,_a 是一个临时变量,它也是再次考虑 const,您不能使用非 const 引用来引用 const 变量。

然而,当我回到家后,我惊讶地发现它可以完美地与所有可能的编译器一起编译。另外,我没有得到这份工作。我的哪一部分理解错了?

class A {
    int& a;
public:
    A(int _a):a(_a) {}
};

int main() {
    A a(10);
}    

最佳答案

此代码没有“分配” const...

代码调用带有 int 的构造函数,然后调用 int& 的初始化程序。当您假设它意味着 int& b = 10 而它更像 _a = 10; 时,您跳过了编译器看到/采取的几个步骤。 int& a = _a;.它可以编译,但绝对不是您想要使用的(绑定(bind)对堆栈的引用,稍后将导致未定义的行为/损坏)...

关于c++ - 为什么会这样编译?期待 "cannot assign a constant to a non-const reference",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7975825/

相关文章:

c++ - 如何使用 R 和 Rcpp 删除 NumericVector 中的元素以进行递归

c++ - 进程的内存空间从哪里开始,到哪里结束?

来自 C++ 应用程序的 Python C API - 知道何时锁定

c++ - 'linesize alignment' 是什么意思?

c++ - 在 C++ 中使用 const 成员变量有优势吗

c++ - 模板和 __LINE__ 问题

用于比较任何无符号和有符号整数的 C++ 模板函数

c++ - 如何保证单例不被过早销毁?

c++ - C++ 与 Python 之间的通信 (IPC)

c++ - std::get() 如何与 std::tuple 一起工作?