我只是想知道如何
void test()
{
const static int ABC = 12;
cout << ABC;
}
不同于
void test()
{
const int ABC = 12;
cout << ABC;
}
如果这个函数在程序执行过程中被重复调用?我的意思是,有任何性能差异吗?或者有什么理由让你更喜欢其中一个?
最佳答案
有几件事会影响答案:
- 首先,只要值是
const
,它几乎肯定会在任何情况下被优化掉。这意味着生成的代码很可能是相同的。 - 其次,
static
成员存储在其他地方,这意味着更少的局部性,并且可能会出现缓存未命中。 - 第三,初始化的成本取决于类型。在您的情况下,对于 int,初始化成本基本上不存在。对于更复杂的用户定义类型,它可能是巨大的。
所以答案是,如果编译器足够简单地找出它们并进行优化,它会产生零的差异。在您的示例中,几乎可以肯定是这种情况。
只要变量具有易于构造且成本低廉的类型,则首选非静态以避免缓存未命中。
如果该类型的构造成本很高,您可能想使用 static
。
当然,最后也是最重要的:
不要相信我们的猜测。如果您担心性能,只有一种正确的做法:
- 测量它,以验证它确实是一个问题
- 衡量每个可能解决方案的性能
- 选择带来最佳性能的解决方案。
关于c++ - 重复调用的函数中的静态常量与常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1315292/