2011-03-13 39 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"; 

這也將擺脫的警告。

相關問題