gpt4 book ai didi

c++ - 通过 const & 写入类成员

转载 作者:太空狗 更新时间:2023-10-29 23:49:16 24 4
gpt4 key购买 nike

在这个例子中,是否将 c 风格强制转换为 int&,然后进行赋值以破解类 A 未定义行为的接口(interface)?

class A
{
public:
A()
: x(0)
{
}

~A()
{
std::cout << x << std::endl;
}

const int& getX()
{
return x;
}

private:
int x;
};

int main()
{
A a;
int& x = (int&)a.getX();
x = 17;
std::cout << x << std::endl;
}

输出:

17
17

如果是这样,我可以引用标准的哪一部分?另外,有什么理由可以编译而没有警告吗? (我在 cpp.sh 上使用 -Wall、-Wextra 和 -Wpedantic 测试了 c++14)

最佳答案

const int& getX() { return x; }

由于此方法未标记为 const,因此 x 是一个可变的 int。在返回点获取引用并转换为 const int&。请注意,尽管引用的是 const int,但实际的 referee int 是可变的。这很重要。

int& x = (int&)a.getX();

此行采用返回的 const int 引用并将其const_cast 转换为 int 引用。这在 C++ 中是合法的,句号。 [expr.const.cast]

但是,只有在被引用的原始对象是可变的情况下,通过此引用进行写入才是合法的。

在这种情况下,它是。

您可以在[dcl.type.cv]

中找到详细信息

关于c++ - 通过 const & 写入类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43684754/

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