|
|
1
4
是,根据7.1.5.1/4,这是未定义的行为:
请注意,当构造函数调用完成时(3.8/1),对象的生存期开始。 |
|
|
2
2
这可能是一个罕见的情况下,不太了解
例如:
|
|
|
3
2
如果定义对象的常量实例,然后丢弃常量并修改对象的内容,则会得到未定义的行为。 从表面上看,您想要的恰恰相反:创建对象的非常量实例,然后将指向该对象的常量指针返回(大多数)客户端,而“所有者”保留指向该对象的非常量指针,以便它可以根据需要修改成员。 您通常会通过定义带有私有ctor的类来管理这种情况,因此大多数客户机无法创建这种类型的对象。然后,该类将把所有者类声明为友元,这样它就可以使用私有ctor和/或静态成员函数来创建对象的实例(通常只创建一个实例)。然后,owner类将指针(或引用)传递给const对象供客户端使用。您既不需要可变成员,也不需要丢弃常量,因为拥有修改对象“权利”的所有者始终拥有指向该对象的非常量指针(或引用)。它的客户端只接收常量指针/引用,防止修改。 |
|
|
4
1
但是,仅当您正在调用的成员函数没有尝试实际执行时,才会定义该行为
修改
对象(即修改常量对象的不可变成员)。一旦它尝试执行修改,行为将变得未定义。在你的情况下,方法
仅仅调用这个方法也是完全合法的。 |
|
|
5
0
用这些任意的名字很难说出目的。如果
然而,与此不同的是,你的例子对于你似乎提出的问题来说有点混乱。
|
|
|
6
0
但是,有两个指针指向同一个值是非常好的,一个指针
|
|
|
7
0
你为什么不利用const cast呢? 如果对象的状态不是常数,有什么理由使其成为常数吗?
|