4
string a=NULL;

エラーが発生します。文字列を NULL として初期化する理由と方法を教えてください。

しかし、私が書くとき

string a="foo";

これはうまくいきます。

4

3 に答える 3

14

実際に空を取得するにはstd::string、次のように記述します

std::string a;

std::stringのデフォルト コンストラクターは、プロンプトを表示せずに空の文字列を返します。

余談ですが、C++ で NULL を使用することは一般的にお勧めできません。推奨されるのは、0 を使用するか (いずれにしても NULL が定義される傾向にあります)、最新の十分なコンパイラがある場合はnullptr.

于 2012-12-16T00:05:43.813 に答える
4

null空の文字列には違いがあります(空の文字列も有効な文字列です)。「nullable」オブジェクト (特定のタイプのオブジェクトを最大boost::optional1 つ保持できるもの) が必要な場合は、次を使用できます。

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)
于 2012-12-16T00:12:03.813 に答える
-2

実際に行っていることを分解してみましょう。

string a=NULL;

まず、実行しstring aます。これにより、スタック上にデフォルト値 (空の文字列) で新しいオブジェクトが作成されます。a=NULL次に、文字列クラスの代入関数を呼び出すを実行します。しかし、何NULLですか?NULLC ++では、マクロは単にに展開されます0。したがって、変数に整数を代入しようとしていますがstring、もちろん不可能です。

string a="abc"

char配列を割り当てたいため、stringクラスにはchar配列に対してオーバーロードされた代入演算子メソッドがありますが、整数に対してはオーバーロードされていないためです。NULLそれが機能せず、「abc」が機能する理由です。

于 2012-12-16T00:09:07.990 に答える