示例1:
char* message = ( m_message != NULL ? m_message : "" );
上面的行给出编译器错误,因为从const char *到char *的转换无效。在g ++编译器中。但下面的代码可以工作。
示例2:
char* message;
if(m_message)
message = m_message;
else
message = "";
为什么在第一个示例中使用g++
而不是第二个示例中出现编译器错误?这两种方式在Windows中运行良好。
答案 0 :(得分:3)
字符串文字 - > char*
转换仅在直接转换时允许(但已弃用) - 您不能让值“通过”其他地方转换为const char*
。
您的第二个代码是直接从字符串文字转换为char*
,这是“仅”弃用。
第一个是第一个指针衰减到const char*
- m_message != NULL ? m_message : ""
的结果是const char*
- 然后尝试将结果const char*
转换为{ {1}},这是不允许的。
此代码也会产生错误,原因相同:
char*
答案 1 :(得分:0)
C ++中字符串文字的类型不是“char *”,而是“const char [n]”,即const字符数组(在本例中为const char [1])。最初允许转换为char *以向后兼容C库调用,但现在不推荐使用它,因为它不安全。
在g ++中,我得到了“-Werror = write-strings”。