2011-03-13 34 views
10

我正在使用Boost.Interprocess编写一个函数作为实验的一部分。在函数中,我将一个字符串文字分配给一个声明为constexpr char*的变量。当我这样做时,我得到:constexpr和不推荐使用的转换警告

warning: deprecated conversion from string constant to char* [-Wwrite-strings]

我对constexpr的理解是,在变量声明中,它的行为就像变量声明为const一样,但增加了有关该变量必须初始化的规定,并且初始化必须使用常量表达式。

有了这种理解,我期望constexpr char*表现为const char*,因此不会发出警告。我是否错过了constexpr的工作原理?

我在使用-std = C++ 0x编译GCC 4.6.0 20110306。

任何推理发出警告将不胜感激。谢谢!

回答

10

constconstexpr将使您的变量char* const

您仍然有问题,字符串文字是const char,并且将其地址转换为char*是允许的,但不建议使用。

+1

谢谢。我忽略了指针的另一个“常量”。我将声明更改为'constexpr const char *',警告消失。谢谢! – mmoran 2011-03-13 17:24:11

6

对于另一种解决方案是:

相反OF-

constexpr char* foo = "bar"; 

你可以做 -

constexpr char foo[] = "bar"; 

这也将摆脱的警告。

相关问题