根据§7.1.5.1/4规定:
除了任何声明为mutable(7.1.1)的类成员可以被修改外,任何在其生命周期(3.8)中尝试修改const对象的行为都会导致未定义的行为。
因此我的问题是:什么时候一个对象是const对象?
特别地,非const对象中的const成员是否被视为const对象?
除了任何声明为mutable(7.1.1)的类成员可以被修改外,任何在其生命周期(3.8)中尝试修改const对象的行为都会导致未定义的行为。
因此我的问题是:什么时候一个对象是const对象?
特别地,非const对象中的const成员是否被视为const对象?
class Foo {
const Bar bar;
void replaceBar(Bar bar2) {
*(const_cast<Bar *>&bar) = bar2; // Undefined behavior?
}
}
这是因为我有一个不可变类(所有字段都是const),但我想要一个移动构造函数,它在技术上修改了传入的值。在这种情况下,“作弊”是可以接受的,因为它不会破坏逻辑上的常量性。
std::string
开始移动。 - T.C.Foo a; Foo b(move(a));
中,a.bar
没有被修改?如果任何a
的析构函数被内联,那么如果在编译时已知构造函数的效果,则可以轻松优化这些析构函数中的条件。 - user743382