Mar*_*n G 3 c++ const const-cast undefined-behavior
作为我之前的问题的后续(通过const&写入类成员),是否也很好地定义并正确抛弃类成员方法的常量?
class A
{
public:
A()
: a(5)
{
}
int run() const
{
std::cout << "a: " << a << std::endl;
int& x = (int&)a;
x = 17;
std::cout << "a: " << a << std::endl;
return 0;
}
private:
int a;
};
int main()
{
A program;
return program.run();
}
Run Code Online (Sandbox Code Playgroud)
输出(在cpp.sh上用c ++ 14测试-O0,-Wall,-Wextra和-Wpedantic):
a: 5
a: 17
Run Code Online (Sandbox Code Playgroud)
如果没有,我会参考哪个标准来解释?
是的,您的代码是有效的,尽管不推荐,只要您启动的对象实例是非const(在您的代码中就是这种情况,A program;非const).
const从const实例中删除-ness 是UB(未定义的行为).const从一个const初始化的非const实例中删除-ness的定义很明确,参见例如文档const_cast.
如果您确实需要从const成员函数修改成员变量,请考虑将前者标记为mutable.否则,当某人(错误地)在const实例上调用您的成员函数时,您当前的技术将导致UB .
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |