int main(){
int x = 10;
const int&z = x;
int &y = z; // why is this ill formed?
}
Run Code Online (Sandbox Code Playgroud)
为什么初始化非常量引用int到常量引用不正确?这背后的原因是什么?
好吧,为什么它不应该是不正确的?
它是不正确的,因为它打破了const correctenss的明显规则.在C++语言中,不允许将常量访问传递隐式转换为非常量访问路径.指针和引用都是一样的.这就是拥有持续访问路径的全部目的:防止修改路径所导致的对象.一旦你使它保持不变,就不允许你回到非常数,除非你通过使用做出明确而有意识的努力const_cast.
在这种特殊情况下,您可以通过使用const_cast(这const_cast是为了)来轻松地从访问路径中删除constness,并合法地修改引用的对象,因为引用的对象不是真正的常量
int main(){
int x = 10;
const int &z = x;
int &y = const_cast<int &>(z);
y = 42; // modifies x
}
Run Code Online (Sandbox Code Playgroud)