我正在使用Wt :: WFormModel,其示例将字段名称表示为static const char*
。我一次对我的项目进行了一些更改,其中一个更改字段表示为constexpr
。经过多次故障排除后,我在the WFormModel documentation:
字段类型为
const char *
,而不是字符串比较 识别字段,使用指针比较。因此,你真的应该 在整个代码中使用相同的字段常量来引用给定的 字段,你不能使用C ++ 11constexpr
作为字段常量 没有唯一值(因为它没有存储空间)。
constexpr char*
的表示与const char*
的表示形式相比如何?
答案 0 :(得分:2)
出于同样的原因,这并不一定有效:
const char *lit1 = "foo";
const char *lit2 = "foo";
assert(lit1 == lit2);
编译器可以识别这两个文字实际上是相同的值,这样做可以为它们提供相同的存储空间。但它可能不会。标准并不要求它。
如果lit1
和lit2
在不同的文件中,那么给它们相同的指针值就是从编译器技巧到链接器技巧。这种情况发生的可能性要小得多。
一种思考constexpr
的方法是创建文字的复杂方式。因此,constexpr
变量就像文字一样;它的存储(如果有的话)不受任何一个翻译单元或使用点的约束。编译器/链接器可以将它们全部整理在一起......或者它不能。标准并不要求他们这样做。