char* = "literal"
来源:5-8 字符串的指针表示

avoidOverfitting
2020-11-10
老师好。我在VS19中,有这样的报错 char* ptrS = "literal"
ERROR: a value of type “const char[8]” cannot be used to initialize an entity of type “char*” 但是老师您上课就可以编译过这个。是因为您用的版本比较早,所以支持这种C-type的规则吗?而现在非要用char[]的话,一般写成:
//style-1
char strArr[] = "literal"; //means init stack-variable strArr[] with "literal"
char* ptrS = strArr; // ptrS points to strArr[]
// style-2
const char* s = "literal"; //means a const ptr pointing to a const literal
我自己查cppreference.com发现了这个:
因该就是下面这种用一个char*指向各种string literal的用法被放弃了吧?
//C-style (deprecated)
char* ptrS = "literal0";
ptrS = "literal1";
并且C也不支持char[] 直接用= 来assign新的literal,所以就是cpp11以后最好用String来操作literal了么?就像这样:
// std::string, which uses operator overloading for re-assignment
string str = "literal0";
str = "literal1";
抱歉问题有点长,就是想确认一下我的理解是不是正确的。多谢!
写回答
1回答
-
是的, char* ptrS = "literal"这个语法是deprecated了,这里存在一个隐式类型转换;所以新的编译器标准已经放弃了。老式的C方式转换确实有很多问题,除非你做很底层的C开发,否则建议使用标准库的string。
012020-11-10
相似问题