我已经在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
这并不是说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
?