constexpr 和不推荐使用的转换警告
Posted
技术标签:
【中文标题】constexpr 和不推荐使用的转换警告【英文标题】:constexpr and deprecated conversion warning 【发布时间】:2011-03-13 05:04:43 【问题描述】:我正在编写一个函数作为 Boost.Interprocess 实验的一部分。在函数中,我将字符串文字分配给声明为constexpr char*
的变量。当我这样做时,我得到:
warning: deprecated conversion from string constant to char* [-Wwrite-strings]
.
我对@987654323@的理解是,在变量声明中,它的行为就好像变量被声明为const
,但增加了变量必须初始化的规定,并且初始化必须使用常量表达式。
有了这种理解,我希望constexpr char*
的行为与const char*
一样,因此不会发出警告。我是否错过了 constexpr
的工作原理?
我正在使用 -std=c++0x 编译 GCC 4.6.0 20110306。
我们将不胜感激任何发出警告的理由。谢谢!
【问题讨论】:
【参考方案1】:来自constexpr
的const
将使您的变量char* const
。
您仍然存在字符串文字为 const char
并且允许将其地址转换为 char*
的问题,但已弃用。
【讨论】:
谢谢。我忽略了其他const
的指针。我将声明更改为constexpr const char*
,警告消失了。谢谢!【参考方案2】:
另一种解决方案:
而不是-
constexpr char* foo = "bar";
你可以做-
constexpr char foo[] = "bar";
这也将消除警告。
【讨论】:
以上是关于constexpr 和不推荐使用的转换警告的主要内容,如果未能解决你的问题,请参考以下文章
如何摆脱 GCC 中“从字符串常量到‘char*’的不推荐转换”警告?
在非 constexpr 函数上添加的 constexpr 限定符不会触发任何警告