【发布时间】:2015-02-12 12:31:22
【问题描述】:
我知道,出于可读性原因,您应该在通过引用或指针传递参数时尽可能使用 const 关键字。如果我指定一个参数是常量,编译器是否可以做任何优化?
可能有几种情况:
功能参数:
常量引用:
void foo(const SomeClass& obj)
常量 SomeClass 对象:
void foo(const SomeClass* pObj)
还有指向 SomeClass 的常量指针:
void foo(SomeClass* const pObj)
变量声明:
const int i = 1234
函数声明:
const char* foo()
每个都提供什么样的编译器优化(如果有的话)?
【问题讨论】:
-
const在指针或引用的目标上并不意味着常量。这意味着这是一个对象的只读视图。通过其他方式访问同一对象可能会改变它。只有对象定义上的const实际上使它不可变。 -
使用
const的主要目的不是帮助编译器进行优化,而是保护自己免受错误的影响。实际上,我怀疑任何编译器都依赖const-qualification 来优化代码。 -
@BenVoigt 我知道它不会使对象保持不变,而只会使其在此函数的范围内显得不变。也许我没有使用正确的术语来表达我的意思。
-
简短的回答是
const对优化没有影响;这是为了帮助在编译时捕获错误。 -
C 和 C++ 是两种具有共同传统的不同语言。虽然关于不存在的混合“C/C++”的 cmets 可能会提供一些见解,但专注于其中一个会更有意义。
标签: c++ c constants compiler-optimization