答案 0 :(得分:14)
转换
char* p = "foobar";
在C ++ 98 / C ++ 03中已弃用,并且已在C ++ 0x中删除(即删除了§4.2/ 2)。
因此,代码在C ++ 0x中无效。
但是,MinGW g ++ 4.4.1仍然只发出警告,而不是错误。
C ++ 98 / C ++03§4.2/ 2 (在C ++ 0x中删除):
不是宽字符串文字的字符串文字(2.13.4)可以转换为“指向char
的指针”的右值;宽字符串文字可以转换为“指向wchar_t
的指针”的右值。在任何一种情况下,结果都是指向数组第一个元素的指针。仅当存在明确的适当指针目标类型时才考虑此转换,而不是在通常需要从左值转换为右值时。 [注意:此转换已弃用。见附录D.]为了在重载决策(13.3.3.1.1)中进行排序,这种转换被认为是一个数组到指针的转换,然后是一个限定转换(4.4)。 [示例:"abc"
转换为“指向const char
的指针”作为数组到指针的转换,然后转换为“指向char
”作为限定转换。 ]
答案 1 :(得分:2)
我认为这在C ++ 0x中现在是非法的。 C ++ 03对遗留代码的这种转换有一个特别的警告,但是C ++ 0x删除了它,现在你违反了const的正确性。
当然,我不知道是否有任何真正的编译器已删除它,但它们完全属于他们的权利。