16

在 C 和 C++ 中,制作局部const变量有什么好处static?假设初始化不使用其他变量,在调用之间保留值和每次调用设置相同的常量值之间有什么区别吗?

一个有效的 C 编译器可以忽略static?

在 C++ 中,它避免了调用之间的构造/破坏,但还有其他好处吗?

4

2 回答 2

9

如果你有类似的东西,它不占用堆栈空间可能是一个好处:

static const double table[fairly_large_number] = { .... };

显然,构造成本也可能足够大,以至于如果函数被多次调用,那么只构造一次对象就很有价值。

于 2013-02-20T23:55:36.527 回答
3

是的,这是巨大的:语义上的好处。

当你放 时const,你不仅仅意味着编译器不应该让你修改变量。您对以后阅读代码的人做出更大胆的声明:这永远不会改变。甚至没有副作用,您将此变量作为指向另一个函数的指针。

此外,编译器可以利用这些新信息并在某些情况下对其进行优化,具体取决于您正在处理的特定类型。

(要清楚,我在这里说的是constvs. non-const,而不是staticvs. non-static。)

编辑这个 SO 答案也非常有用。

于 2013-02-20T23:58:20.317 回答