2

一部の関数呼び出しでは、このようなものが表示されます。

function(variable1, "someValue");

これに基づいていくつか質問があります

1)c ++は2番目の引数をどのように扱いますか?

2)ある関数がcstringを受け取る場合、次のことを行うとなぜエラーが発生するのですか?

functionTakingCString(stringVariable.c_str() + "someValue");

const char変数を宣言する代わりに、何らかの方法はありますか?どこか間違っている場合は訂正してください。

4

4 に答える 4

3

これらは文字列リテラルと呼ばれ、APIが必要とするものに応じて、通常はaconst std::string&またはaを渡すような文字列リテラルである引数を取りたい場合。const char*

于 2012-09-20T16:45:40.883 に答える
2

2) 一部の関数が cstring を取る場合、次の操作を行うとエラーが発生するのはなぜですか?

これは、「+」演算子がchar *型に対してオーバーロードされていないためです。2 つの文字列を連結するために演算子がオーバーロードされたstringVariable型の に連結し、 orを受け入れる関数に を渡すことができます。string+c_str()char *const char *

于 2012-09-20T16:49:19.913 に答える
1
  1. const char *

  2. 二項演算子は、オペランドタイプ+には適用できません。const char*std :: stringの場合、演算子のオーバーロードのために機能します。

于 2012-09-20T16:45:35.977 に答える
0

2 番目の引数は const char* です。特定の型を受け取る目的の型の特別な変換コンストラクターがある場合は、ある型から別の型に変換できる場合があります。場合によっては、コンパイラがこれを行うことができます。

この例では、文字列には const char* を受け取るコンストラクターが含まれているため、コンパイラーは内部で const char* を文字列に変換できます。この種の動作を止めたい場合は、明示的なキーワードを調べてください。

char* 型は実際にはクラスではないため、文字列に対して機能する + 演算子はありません。でも、

(stringVariable + "someValue").c_str()

stringVariable は文字列であり、プラス演算子は char* を文字列に変換できるため、機能します。

于 2012-09-20T16:49:50.910 に答える