" char * p =" 123"是对还是错?

时间:2017-01-05 11:24:48

标签: c++ pointers

我总是认为它在c ++中是错的,直到它在vs2015中工作。

既然p不能改变任何东西,为什么c ++标准允许char* p="123"是正确的。

如果c ++标准强制我们使用const char* p="123",那就更好了。

"他们"忘记 ?或者......其他原因?...我想知道。

2 个答案:

答案 0 :(得分:0)

不,C ++标准不允许这样做as for example g++ tells you

前段时间这是合法的,所以编译器仍然支持它,但绝对不建议编写这样的代码。

答案 1 :(得分:0)

来自http://en.cppreference.com/w/cpp/language/string_literal

  

在C中,字符串文字的类型为char [],可以直接赋值   到(非常)char *。 C ++ 03也允许它(但不赞成使用它,   因为文字是C ++中的const)。 C ++ 11不再允许此类分配   没有演员。字符串文字不一定是C字符串......

因此,标准不允许今天。 VS2015(可能还有一些其他编译器)不符合此类。