忽略无效的转换错误,GCC

het*_*lek 2 c++ qt gcc

我已经在Windows上与MinGW合作了一段时间,我现在正在尝试在Mac上编译它(使用GCC).我使用的是Qt,但这与问题没什么关系.

为什么海湾合作委员会如此正式,让我投下一切?这是多么荒谬的我必须经历并抛出一切不匹配的东西.

例如,它会抛出错误:

main.cpp: error: invalid conversion from 'const char*' to 'char*'
Run Code Online (Sandbox Code Playgroud)

使用此代码:

const char *a = "a";
char *b = a;
Run Code Online (Sandbox Code Playgroud)

是否有任何标志我可以传递给GCC编译器或任何预处理器指令告诉它忽略这些?谢谢.

编辑:让我改一下.为什么这对MinGW而不是GCC有用,我可以让它在GCC上工作吗?

编辑2: MinGW - http://i.imgur.com/zGvf6.png

Gri*_*zly 5

这并不是说gcc是迂腐的.const char*是一个指向const char,这是一个非常不同的类型从char*,它指向char.对于以后你可以修改指针的内容,对于前者你不能.允许这种转换是隐式的会引起严重错误,因为a使用非const指针修改内容是微不足道的,即使内容不应该是可修改的.

从理论上讲,你可以抛弃常数:

char* b = const_cast<char*>(a);
Run Code Online (Sandbox Code Playgroud)

这告诉编译器你知道你正在做的事情是不安全的,但是如果发生了可怕的事情(你试图修改a的数据const char*),你会全部责备,因为你明确地告诉它忽略constness在那个位置是好的.这样的事情应该稀疏地完成,并且只有在确认它没问题之后才能完成.

查找gcc和mingw实际上在编译时接受隐式转换-fpermissive(将其降级为警告).然而,使用这种不安全的功能是一个非常糟糕的主意,所以我的建议是尽可能远离这种邪恶的诱惑.而不是降低误差门限,我宁愿建议类似的选项-Wall,-Wextra甚至可能-pedantic-Werror使编译器为挑剔越好.编程时这样做可能会很麻烦,但可以轻松地节省数小时的调试时间(-Werror当然没有警告策略).

与您的问题没有直接关系,但由于您使用的是c ++:为什么在需要char*时使用std::string