c++ - 为什么只有C++会出现数据类型转换错误,而C不会出现数据类型转换错误?

标签 c++ c

我不是 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/

相关文章:

c++ - 用于 2D/3D 游戏开发的 Qt 库

c++ - 数字火星 - 无法打开输入文件 'iostream'

python - 有什么方法可以处理 Python 代码中的 C 扩展段错误?

c - Linux 没有 C 手册页

c - 通过左移将 16 位模式传输到另一个寄存器

c++ - 为 Visual Studio 2013 构建 cgicc-3.2.16

c++ - 这是类型转换还是某种指针算法?

c++ - 为什么我的 std::set find() 不起作用?

c - 在 MPI 中收集,但不使用 MPI_Gather

c - 在C中获取当前时间