fre*_*low 6 c++ pointers deprecated string-literals c++11
以下代码在C++ 0x中是合法的,已弃用的还是非法的?
char* p = "foobar";
Run Code Online (Sandbox Code Playgroud)
我最初在这里提出这个问题作为评论.
Che*_*Alf 14
转换
char* p = "foobar";
Run Code Online (Sandbox Code Playgroud)
在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"作为限定转换.]