string a=NULL;
エラーが発生します。文字列を NULL として初期化する理由と方法を教えてください。
しかし、私が書くとき
string a="foo";
これはうまくいきます。
実際に空を取得するにはstd::string
、次のように記述します
std::string a;
std::string
のデフォルト コンストラクターは、プロンプトを表示せずに空の文字列を返します。
余談ですが、C++ で NULL を使用することは一般的にお勧めできません。推奨されるのは、0 を使用するか (いずれにしても NULL が定義される傾向にあります)、最新の十分なコンパイラがある場合はnullptr
.
nullと空の文字列には違いがあります(空の文字列も有効な文字列です)。「nullable」オブジェクト (特定のタイプのオブジェクトを最大boost::optional
1 つ保持できるもの) が必要な場合は、次を使用できます。
boost::optional<std::string> str; // str is *nothing* (i.e. there is no string)
str = "Hello, world!"; // str is "Hello, world!"
str = ""; // str is "" (i.e. empty string)
実際に行っていることを分解してみましょう。
string a=NULL;
まず、実行しstring a
ます。これにより、スタック上にデフォルト値 (空の文字列) で新しいオブジェクトが作成されます。a=NULL
次に、文字列クラスの代入関数を呼び出すを実行します。しかし、何NULL
ですか?NULL
C ++では、マクロは単にに展開されます0
。したがって、変数に整数を代入しようとしていますがstring
、もちろん不可能です。
string a="abc"
char配列を割り当てたいため、string
クラスにはchar配列に対してオーバーロードされた代入演算子メソッドがありますが、整数に対してはオーバーロードされていないためです。NULL
それが機能せず、「abc」が機能する理由です。