问题标签 [const-method]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 在 c++ 中,为什么编译器在 const 也可以工作时选择非常量函数?
例如,假设我有一个类:
在代码的其他地方,我有这样的东西:
有谁知道为什么编译器会在这种情况下选择非常量版本?
这是一个有点做作的例子,但我们试图解决的实际问题是定期自动保存一个对象,如果它已经改变,并且指针必须是非常量的,因为它可能会在某个时候改变。
c++ - 我应该将这些方法声明为 const 吗?
我正在处理一些 C++ 代码,其中我有几个具有私有方法的管理器对象,例如
它调用OnFooUpdated()
此对象的侦听器上的方法。
请注意,它们不会修改此对象的状态,因此从技术上讲,它们可以成为const
方法,即使它们通常会修改整个系统的状态。特别是,侦听器对象可能会回调该对象并对其进行修改。
就我个人而言,我想让它们保持原样而不是声明它们const
。
但是,我们的静态代码检查器 QAC 将此标记为偏差,因此我必须声明它们const
,或者我必须争论为什么它们应该保持非常量并获得偏差许可。
不声明这些方法的论据是什么const
?
还是我应该遵循 QAC 并声明它们const
?
我应该采用仅限于此对象的严格局部观点,还是将系统视为一个整体?
c++ - const 成员函数只能调用 const 成员函数吗?
const 成员函数是否只调用 const 成员函数?
如果我不将 compute() 设为 const,则编译器会抱怨。是不是因为不允许 const 成员函数修改成员,所以它不允许任何对非常量的调用,因为这意味着 const 成员函数将“间接”修改数据成员?
c++ - C++ - 为什么不能用'const'限定符创建静态成员函数
今天我遇到了一个问题。我需要一个static
成员函数,const
不是必须的而是更好的。但是,我的努力没有成功。谁能说出为什么或如何?
c++ - 调用 const 函数而不是其非 const 版本
为了我的目的,我尝试包装类似于 Qt 的共享数据指针的东西,经过测试,我发现应该调用 const 函数时,选择了它的非 const 版本。
我正在使用 C++0x 选项进行编译,这是一个最小的代码:
如您所见,Data.x 是一个 const 函数,因此调用的 operator -> 应该是 const 的。当我注释掉非常量时,它编译时没有错误,所以这是可能的。然而我的终端打印:
“非常量数据指针”
是 GCC 错误(我有 4.5.2),还是我遗漏了什么?
c++ - 如何在类中的静态变量上使用递减运算符
我有一个这样的类,我想在“getManagerNumber”中使用递减运算符让ManagerNumber减一,我该怎么办?
c++ - 一个 const 临时成员如何选择调用一个非 const 成员函数而不是一个 const 成员函数?
示例代码取自:http ://en.cppreference.com/w/cpp/types/add_cv (我稍作修改。)
输出是:
在第二次调用中,T
是 const 合格T()
的,所以应该调用 const 版本,对吗?还是我错过了一些特殊规则?
c++ - const方法的const引用返回的线程安全
考虑这个类:
方法getVectorRef
线程安全吗?
是否有可能在getVectorRef
另一个线程的返回过程中弹出并调用insertElement
,从而改变成员向量并且调用者getVectorRef
得到错误的 const 引用?
两个 const 限定符(一个用于向量,另一个用于方法)在线程安全的上下文中没有意义吗?
c++ - 在非常量对象上,为什么 C++ 不调用具有 public-const 和 private-nonconst 重载的方法的 const 版本?
MSVC 2013 不喜欢这样:
如果我投到一个const
参考,它的工作原理:
为什么我不能const
在非const
对象上调用该方法?
c++ - C++ 重载决议、转换运算符和 const
在这种情况下
情况很清楚 - f(int *) 被调用,这似乎是正确的。
但是,如果我有这个(错误地这样做了(*)):
运算符 char *() 被调用。我无法弄清楚为什么这样的决策路径会比使用运算符 bool() 更好。有任何想法吗?
(*) 如果将 const 添加到第二个运算符,则代码当然可以按预期工作。