在使用Ternary Operator的Linux中,从const char *到char *的转换无效

时间:2016-01-29 10:54:57

标签: c++ linux

示例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中运行良好。

2 个答案:

答案 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”。