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)
行为定义明确:
C++标准,第5.2.11/7节[const cast]
[注意:根据对象的类型,通过指针,左值或指向数据成员的指针的写入操作会导致const-qualifier的const_cast,这可能会产生未定义的行为. - 尾注]
GetA()不写任何成员Bob,所以这个程序不涉及未定义的行为.
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |