通过在构造函数中从'this'复制的指针来突变常量对象。

问题描述 投票:0回答:1

示例代码。

struct Foo {
    Foo() { instance = this; }
    int value = 0;
    static Foo * instance;
};

Foo * Foo::instance = nullptr;

int main(int argc, char * argv[]) {
    Foo const foo;
    //foo.value = 1; // Compiler error, as expected.
    Foo::instance->value = 1; // Fine.
}

这里 foo 是常数,但可以通过静态的 instance 指针,该指针的值为 thisFoo的构造函数。抛开为什么要这样做的问题不谈,我的理解是,这里没有什么技术上的错误。

我相信这样做是安全的,但在 这个 线程中,似乎有一些相反的建议。有一个人似乎将类似的例子描述为不正规,而另一个人则提到了未定义的行为。

撇开建议不谈,这在技术上是否正确和安全?还是我遗漏了什么问题?

c++ this const
1个回答
2
投票

这样做是绝对不明智的。原因有很多。

首先,这不是线程安全的。

第二,通过 "解除consting "来突变const限定的对象。const_cast或通过你所展示的方法(或任何其他方法),就是简单的。未定义的行为.

© www.soinside.com 2019 - 2024. All rights reserved.