構文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";を実行する必要があることを示しているだけです。.
非推奨や問題のポイントがわかりません。この構文が廃止され、問題と見なされるのはなぜですか?