0

次のような関数を書きたいとしましょう。

int get_some_int(string index) {
    ...perform magic...
    return result;
}

ただし、次のように呼び出すこともできます。

int var = obj.get_some_int("blah");

しかし、私はそうではないのでこれを行うことはできませconst char[4]const string&

私はそれをできた:

int get_some_int(char* index) {
    ...perform magic...
    return result;
}

しかし、これは多くの警告を吐き出し、それがどのように行われるべきかではないことを意味します。

それでは、文字列引数を処理する正しい方法は何ですか?

4

3 に答える 3

5

const char[4]はconststring&ではないため、これを行うことはできません。

いいえ。ただしstd::string、非explicit変換コンストラクターがあるため、一時的なstd::stringものが作成されるので、わかりやすくなっています。-http ://ideone.com/xlg4k

于 2012-06-30T15:53:20.107 に答える
1

あなたがしたようにそれは働くはずです

int get_some_int(string index) {  // This works as std::string has a constructor
                                  // That takes care of the conversion
                                  // from `char const*`  which you char[4] 
                                  //decays into when passed to a function

しかし、より良い解決策は、const参照を使用することです。

int get_some_int(string const& index) {  // works for the same reasson

ここでconstを使用すると、関数がどのように機能するかが示され、入力がどのように使用されているかに関する情報が伝達されます。また、文字列へのconst参照を返すメソッド(たとえば、constオブジェクトから)とともに使用した場合でも、期待どおりに機能します。

于 2012-06-30T15:56:16.917 に答える
0

行う:

int var = obj.get_some_int(string( "blah"));

あなたがそれでより快適に感じるならば。

于 2012-06-30T15:55:39.837 に答える