在函数内声明const而不是变量有什么好处吗?

Mar*_*son 7 c++ variables constants

如果我有一个只存在很短时间的功能,那么使颜色列表保持不变会有所不同吗?

string getrandcolor(){
    const string colors[5] = {"red", "blue", "green", "yellow", "purple"};
    return colors[rand() % 5];
}
Run Code Online (Sandbox Code Playgroud)

注意:实际的颜色列表包含数百种颜色,而不仅仅是我展示的小样本,不确定这是否也有所不同.

Cra*_*rks 16

它可以防止您意外覆盖您不想改变的变量."哎呀!" - 保护可能const是最重要的功能.

假设编译器可以将某种优化视为知道变量不应该改变,但是我的测试从未发现在您描述的情况下实际上做了一些有意义的事情.

const static 在您的特定代码示例中确实存在重要差异.因为colors []数组是本地的,所以每次getrandcolor()调用函数时都必须重新构造它.这意味着每次调用时字符串构造函数都会运行五次getrandcolor(),这非常浪费.const static意味着数据只构造一次 - 第一次运行函数 - 并放入共享内存空间.

  • `static`可能比这里的'const`有更大的影响,所以+1提及它. (4认同)
  • "它必须重新构建"我不确定这是真的.它可能是_will_,但我不认为"它必须是"是准确的. (2认同)

Lig*_*ica 6

在性能方面?不,可能不是.看起来你的阵列也可以static,然后也许是的.

在代码风格方面?有可能.虽然添加const会使您的代码变得有点冗长,但它也清楚地表明数据不会被修改.这既是记录又是安全的.


理想情况下,默认情况下,C++中的所有对象都是常量,并且您必须编写mutable以使它们成为变量.一切都倒退了!

  • "理想情况下,C++中的所有**变量**默认为**const**" - 让我们考虑一下:-) (6认同)