次のコードはなぜコンパイルされますか?それはコンパイルされ、clangでうまく動作し、first.
を印刷します。しかし、正しい動作は、不平を言って、適切なエラーを出すべきだと思います。C++ std :: string初期化の動作が正しくありません
#include <iostream>
#include <string>
int main()
{
std::string s{ "first", "second" };
std::cout << s << std::endl;
}
この質問は、thisにインスパイアされています。
これは、「最初の」文字列の最後に暗黙の「\ 0」があるためです。これは 'string'オブジェクトに、より多くの文字を探すのを止めるように指示します"second"のメモリに) – DarthRubik
@DarthRubik:いいえ、それは何が起こっているのではありません。 –
根本的な問題は[この問題](https://stackoverflow.com/questions/24112281/c11-initializer-list-fails-but-only-on-lists-of-length-2)と同じです。 – chris