以下是使用const_cast未定义的行为吗?

Nei*_*irk 8 c++ language-lawyer

这是一个语言律师问题,而不是一个好的练习题.

以下代码是有效还是未定义的行为?const对象最终调用非const函数,但它实际上并不修改对象的状态.

struct Bob
{
    Bob() : a(0) {}

    int& GetA()
    {
        return a;
    }

    const int& GetA() const
    {
        return const_cast<Bob&>(*this).GetA();
    }

    int a;
};

int main()
{
    const Bob b;
    int a = b.GetA();
}
Run Code Online (Sandbox Code Playgroud)

qua*_*dev 9

行为定义明确:

C++标准,第5.2.11/7节[const cast]

[注意:根据对象的类型,通过指针,左值或指向数据成员的指针的写入操作会导致const-qualifier的const_cast,这可能会产生未定义的行为. - 尾注]

GetA()不写任何成员Bob,所以这个程序不涉及未定义的行为.


归档时间:

查看次数:

273 次

最近记录:

11 年,3 月 前