|
|
1
9
make run()const,并使m_data和m_completed可变。这是可行的,但概念上是错误的,因为run()明显地更改了数据。 事实上,不是真的。这个 变量 事实上,在你的课堂里是改变的,但你永远也无法证明这一点。调用run()不会更改用户可以从类的接口中检索到的任何内容。如果你不能检索到关于这种变化的任何信息,那么你就不可能证明这种变化。这不仅仅是一个语义问题,它直接涉及到“可变”关键字的整个要点。 “mutable”关键字被严重误解。 也就是说,虽然我得到的信息最少,但我可能会用上面的方式来做,我并不推荐它。几乎可以肯定的是,如果对你的问题有一个更大的看法,有一个更好的方法是显而易见的。 我可能会使用的另一个方法是您显然设置为避免的方法:强制用户在使用get_data()之前调用run()。说实话,这也是一个非常次优的方法。或许更甚。 编辑: 如果您决定使用可变方法,那么我建议您进行一些更改。拥有一个名为“run()”的函数,它是常量,不会返回任何感兴趣的内容,这会让人非常困惑。这个函数当然应该是非常量。因此,如果已经决定这样做,我要做的就是让run()调用一个const和private函数,该函数具有当前“run()”函数的行为,在指定的条件下,get_data()也会引用该函数。 |
|
|
2
5
一些有助于你澄清问题的抽象评论:
问题可能是
我的想法是,你将“操作”和“操作结果”的不同概念保留在一个奇怪的类中,这会导致混淆。 |
|
|
3
2
在运行算法之前,只需将获取结果作为一个错误(接口的一部分)。然后将工作与结果分开,允许两者都正确地指示它们的常量。如果您试图在运行算法之前调用它,以向客户机表明他们做错了什么,那么get方法可以抛出。 |
|
|
4
2
我认为你的问题是语义上的,而不是句法上的。
请求结果而不调用
如果是的话
不
一个错误,应该是可能的,我觉得没有意义
|
|
|
5
1
如果
你应该使用
|
|
|
6
0
如果我能进入那个位置,我可能会抛出一个例外。 但是,你 可以 逃脱
但是,如果
|
|
|
7
0
如果唯一的事情是
然而,为了进行讨论,您将注意到STL容器每个都有两个
实际上有可能超载
然而,只有当
我假设示例代码有点做作。如果不是,你基本上是在接受:
并将其包装在一个界面非常薄的对象中(即
|
|
|
8
0
const的概念取决于类的实现;重要的是逻辑语义,而不是字段级/函数级的const。因此,如果需要从const调用非const方法,只需const cast。我更喜欢:
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |