![]() |
1
5
我不会使用const-cast解决方案,复制对象可能不起作用。相反,为什么不有条件地分配给另一个常量引用呢?如果myvar有效,请指定它。如果没有,请指定默认值。下面的代码可以使用这个新的常量引用。一种方法是使用条件表达式:
另一种方法是编写一个接受常量引用(myvar)并根据myvar的有效性返回myvar或defaultvar的函数,并将返回值从中分配给myothervar。 第三种方法是使用常量指针,将其指向myvar的地址或默认对象的地址。 |
![]() |
2
9
你可能不需要任何演员。如果你能复制
|
![]() |
3
1
但是,确实
|
![]() |
4
1
没有“C++”的方式(不仅如此,而且对任何事情)。
坏方法是使用
您应该做的是复制对象,然后修改副本。这是唯一的 适当的 处理不可变对象的方法。 |
![]() |
5
0
尝试以下操作
不过,一般来说,删除const是个坏主意。调用方方法返回了对它认为将被视为常量的变量的引用。如果您通过删除常量和修改变量违反了这个假设,那么您可以将任一对象置于有效状态。 在你的特定案件中,这可能是合法的,但一般来说,这是必须避免的。 |
![]() |
6
0
您可以使用复制构造函数或某些赋值运算符从const对象创建一个对象,然后对其进行修改。 但我认为您最好先看看函数为什么返回const类型。它被宣布为警察是有原因的。如果你非常确定这就是你想要的,你可以像这样把警察赶走:
|
![]() |
7
0
没有C++的方法。出于某种原因,该类的作者决定您不应该能够通过此方法修改实例。 如果你是作者,你可以让它返回一个非常量引用。但是这些仍然是可疑的,除非类真的没有业务对您隐藏它(例如,vector不隐藏 什么 它为你保留,只是隐藏 怎样 它为你保存东西)。 更好的方法(取决于这一切的意义)也可能是不公开成员进行外部操作,而是提供一个为您执行此操作的方法。例如:
如果您以后需要这样做以使类处于有效状态,那么可以考虑让它的构造函数这样做。如果您不能做到这一点,那么至少提供一个init()方法,这样就不会使这样一个复杂的类完全依赖于被外部操纵成可用的东西。 当然,也可能有其他不需要强制转换的方法,例如,您可以创建一个副本,修改该副本,然后使用修改后的副本将整个实例替换为另一个实例(假设这足以构造它):
编辑:那么类是按值返回的?在这种情况下,应该没有办法修改类中的实例,因为您得到的只是一个副本。您可以用一个常量引用来引用它,但是即使您放弃了该引用的常量,您仍然在引用一个临时的常量。 我上面的回答假设它返回了一个常量引用,因为这似乎是一个更明智的做法(我没有看到人们经常经过 康斯特 价值,尽管可能有人强烈推荐它)。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |