constexpr string vs const string

Kap*_*pil 3 c++ constexpr c++14

我们正在将一些代码从c ++ 03迁移到c ++ 14,并且只要有一些性能提升,我们就要使用c ++ 14特性.现在我们的一个项目中我们正在根据列名解析csv列名在一个头文件中声明,如下所示:

const string ITEM_NAME = "Item Name";
const string ITEM_ID = "Item Id";
Run Code Online (Sandbox Code Playgroud)

有这样的一百个常量,所以我想知道的是,如果我将上面的代码更改为这样的代码,是否有任何显着的性能增益:

constexpr string ITEM_NAME = "Item Name";
constexpr string ITEM_ID = "Item Id";
Run Code Online (Sandbox Code Playgroud)

由于需要将它们存储在只读存储器中,因此我们可以在二进制文件中使用constexpr的数量有任何限制吗?

编译器是否也自动优化旧的c ++ 03代码并将const变量也放在只读内存中,这种努力是不值得的?

Die*_*Epp 7

使用没有任何优势,constexpr除了您可以在某些constexpr无法评估非表达式的上下文中评估表达式.

你应该坚持,const除非你有特定的理由为什么constexpr有效并且const不起作用.

如果你真的需要只读内存中的变量,那么它们既const不会也不constexpr会有任何不同.我只希望普通类型能够可靠地放在只读内存中,并且std::string肯定不是一个简单的类型.("琐碎型"是一个技术术语.)

  • @Kapil编译时操作,如模板专用和数组大小调整.没有什么能用c ++ 03在`const`中编译,所以你应该没有变化就好. (2认同)