面试官给我看了这样的代码,问我是否可以编译,并给出我的推理。我非常肯定地告诉他它不会编译,因为 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/