问题标签 [const-correctness]
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++ - 被 const 逼入绝境:std::map::find() const 重载
考虑以下代码段:
错误f()
是由 map 的 const 重载导致find()
的const KeyType&
。因为地图的键类型是int*
,所以变成int* const
。 f()
接受一个const int&
参数,这是正确的,因为该参数永远不会被修改。
不幸的是,这最终导致尝试将 a 强制const int*
转换为 a int* const
,这会丢失 int 上的 const 限定符并且不会编译。
这有点烦人,因为参数绝对没有被修改过——它只是用于 find()——但我仍然需要const_cast
它。
有没有办法写f()
没有const_cast
?
c++ - 非内置类型的 const 值返回函数的用例是什么?
最近我读到,从函数按值返回以限定非内置类型的返回类型 const 是有意义的,例如:
我很难理解这样做的好处,一旦对象被返回肯定是调用者的选择来决定返回的对象是否应该是常量?
c++ - const-correctness 是否给编译器更多的优化空间?
我知道它提高了可读性并使程序更不容易出错,但是它对性能的提高有多大呢?
const
顺便说一句,引用和指针之间的主要区别是什么?我会假设它们以不同的方式存储在内存中,但怎么会呢?
c++ - Qt - QList const 正确性
AQList<T *>
不容易是 const 正确的。考虑函数
我可以将 f 更改为
但是我不能做
不再,因为编译器不能隐式QList<T *>
转换为QList<const T *>
. 但是,我可以明确地重新解释 QList,如下所示:
这使我能够使用constList
模板函数将 anyQList<T *>
转换为 a QList<const T *>
,如
它似乎工作正常,但这样做真的安全吗?
c++ - 函数参数中的 struct 关键字和 const 正确性
我的库中有一个不透明类型,定义为:
我不能使用 typedef 传递指向 const 结构的指针,所以一些函数看起来像:
代替:
因此,鉴于此,我有两个问题:参数列表中的 struct 关键字是否仅在 C 中是必需的?有一个更好的方法吗?我应该创建一个typedef,例如:
c++11 - 实现具有 const 正确性的可变参数 zip 函数
我正在尝试实现一个zip
功能。 zip
的参数是 each wrapped<Ti>
,其中Ti
因参数而异。
zip
接受这些wrapped<Ti>
s 并产生一个wrapped<tuple<T1&,T2&,...TN&>>
,或者换句话说,一个包装tuple
了对其参数的引用。引用应保留const
-ness。
这是我第一次尝试zip
使用一个参数,但通常不起作用:
有没有办法用单一版本的zip
?
c++ - 非常量对象的 const 向量
在接口中定义函数时:
我们要指定向量 model_ 不应更改,因为 push_back 等操作不应在向量上执行,但 model_ 中的 IndexCoeffPair_t 结构对象可以更改。我们应该如何指定?
我认为不起作用。
c - 访问器函数采用 const arg 但在 C 中返回非 const 指针
在这里寻求一些建议。
我有一个结构,其中包含指向另一个结构的指针,如下所示:
我也有访问器函数,像这样:
我的问题是关于这些函数中的第二个:这是否违反了关于使用 const 的任何规则或最佳实践?
我在这里使用 const 的原因是表示访问函数不会修改传递给它的结构,但允许调用者修改返回的结构。我最好在参数中删除 const 吗?
c++ - 为什么很少有人输入 const 正确的代码?const 正确的代码会编译得更好/更快吗?
我经常将指针作为函数 args 传递给只读参数(例如结构等)。例如在这个构造函数中:
我以前更喜欢这种方式(不是 const-correct),因为我认为它更容易阅读。但是,我开始觉得这很脏,而是这样做:
一开始似乎很难理解,但直到你习惯它。我的问题:
为什么没有人做对?(我见过这样的小代码)编译得更好/更小/更快?
我确实知道有什么区别,但我真的不在乎不同的语义,因为任何阅读代码的人都可以看到 args 是只读的。(谁会改变指针地址?)
我知道我可以使用引用来代替,但是假设我不想(或者我在纯 C 中)。
c++ - 重复、常量和非常量、getter 的宏解决方案?
可以将此解决方案转换为宏,以便我调用以下内容:
对于返回值的函数和不返回值的函数。我的宏观令牌技能不是那么好,所以我想也许这里有人可以想出一个(或者告诉我这是不可能的)。最终的目标是避免编写难看的单行代码,并用易于理解且不易出错的内容取而代之。