我不是 C++ 专家。当我尝试在 C++ 中执行以下行时出现错误。但是,我在 C 中没有收到此错误。您能解释一下为什么会发生这种情况吗?
int policy;
char *policy_name = (policy == SCHED_FIFO) ? "SCHED_FIFO" : (policy == SCHED_RR) ? "SCHED_RR" : (policy == SCHED_OTHER) ? "SCHED_OTHER":"??";
编译错误:
error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
如果我这样做,错误就会消失。
const char *policy_name = (policy == SCHED_FIFO) ? "SCHED_FIFO" : (policy == SCHED_RR) ? "SCHED_RR" : (policy == SCHED_OTHER) ? "SCHED_OTHER":"??";
问题是为什么会这样?
最佳答案
The question is why does it happen so?
因为 "SCHED_FIFO"
的类型(和其他字符串文字)是 char const[N]
1 转换为 char const*
。也就是说,正确表达式的类型是 const char*
不能分配给 char*
.
char *policy_name = (policy == SCHED_FIFO) ? "SCHED_FIFO" : .......
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
type of this expression is char const*
但是一旦你做了左侧const char*
还有2然后它编译得很好!
希望有帮助。
<小时/>1。哪里N
是一些积分常数值。
2.顺便说一句,const char*
和char const*
是同一个东西!我有这样的习惯,写char const*
而不是const char*
,但它们是可以互换的。
关于c++ - 为什么只有C++会出现数据类型转换错误,而C不会出现数据类型转换错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20965718/