【发布时间】:2021-10-02 04:46:57
【问题描述】:
我是 C++ 新手,正在尝试弄清楚我应该做什么。
以下选项在性能上是否存在差异:
const DATATYPE* name
对
DATATYPE* name
【问题讨论】:
-
可能有,编译器可能有更多选项来优化
const变量。但这是const最不重要的功能(无论如何您不太可能注意到性能上的任何差异)。 -
除非您需要修改对象,否则请始终使用
const。如果可以的话,请尽量避免使用指针。 -
还有一些吹毛求疵:不是 pointer 是恒定的,而是指向 to 的对象/数据。这种区别非常重要,因为您实际上可以拥有一个常量指针(即
DATATYPE* const) -
您可以尝试在少数情况下测试差异,并使用godbolt.org 或
objdump检查生成的程序集,以查看编译器是否对其中一个进行了任何优化。不过一般来说,不要关心优化,只要你不必修改取消引用的值,就使用const T *,否则不要使用const。 -
你很少需要像那样直接使用指针。这对 codegen 的直接影响为 0(可能有一个 const_cast 来删除 const,可以通过不同的指针修改对象等)。如果调用
name->method()最终会因为 const 而调用不同的函数,这可能很重要。
标签: c++ pointers constants c++17