我了解语法char * = "stringLiteral"; 已被弃用,将来甚至可能无法使用。我不明白的是WHY。
我搜索了网络和堆栈,虽然有很多回声确认 char * = "stringLiteral"; 是错误的,const char * = "stringLiteral"; 是正确的,我还没有找到关于为什么说语法错误的信息。换句话说,我想知道问题到底是什么。
说明我的困惑
代码段 1 - EVIL WAY(已弃用)
char* szA = "stringLiteralA"; //Works fine as expected. Auto null terminated.
std::cout << szA << std::endl;
szA = "stringLiteralB"; //Works, so change by something same length OK.
std::cout << szA << std::endl;
szA = "stringLiteralC_blahblah"; //Works, so change by something longer OK also.
std::cout << szA << std::endl;
Ouput:
stringLiteralA
stringLiteralB
stringLiteralC_blahblah
那么这里的问题到底是什么?似乎工作得很好。
代码段 2(“OK”方式)
const char* szA = "stringLiteralA"; //Works fine as expected. Auto null term.
std::cout << szA << std::endl;
szA = "stringLiteralB"; //Works, so change by something same length OK.
std::cout << szA << std::endl;
szA = "stringLiteralC_blahblah"; //Works, so change by something longer OK also.
std::cout << szA << std::endl;
Ouput:
stringLiteralA
stringLiteralB
stringLiteralC_blahblah
也可以正常工作。没有不同。添加const有什么意义?
代码段 3
const char* const szA = "stringLiteralA"; //Works. Auto null term.
std::cout << szA << std::endl;
szA = "stringLiteralB"; //Breaks here. Can't reasign.
我只是在这里说明,为了只读保护变量内容,您必须 const char* const szA = "something"; .
我没有看到弃用或任何问题的意义。为什么这种语法被弃用并被认为是一个问题?