gpt4 book ai didi

c++ - 为什么 const_cast 的行为不如预期?

转载 作者:可可西里 更新时间:2023-11-01 18:20:14 25 4
gpt4 key购买 nike

struct A
{
A() {}

private:
A(const A&); // Explicitly disable the copy constructor.
};

int main()
{
const A a1; // OK.
A a2; // OK.
auto a3 = const_cast<A&>(a1); // Compiler error C2248! ???
}

我的 C++ 编译器是最新的 VC++ 2013 预览版。

编译器提示最后一行错误 C2248: 'A::A' : cannot access private member declared in class 'A'

为什么 const_cast 的行为不如预期?

最佳答案

auto 本身绝不是引用类型。所以最后一行相当于

A a3 = const_cast<A&>(a1);

它尝试使用私有(private)构造函数复制 a1

如果要引用,需要指定引用:

auto & a3 = const_cast<A&>(a1);

当然,尝试使用此引用修改 a1 将产生未定义的行为,因为对象本身是 const

关于c++ - 为什么 const_cast 的行为不如预期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18709772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com