2017-07-21 8 views
1

私はそれがうまくいくことを知っています。私はそれを送信すれば何が起こるかにもっと関心があります。パラメータをchar*に変更してから、それを自分で変換したほうが良いですか?to_String?または、予期しないエラーが長期的に発生するという意味で、このままですか? std::string以来入力パラメータが文字列の関数にchar配列を送るとどうなりますか?

+0

char配列を 'std :: string'オブジェクトにコピーしなければならないので、それは問題はありませんが、非効率です。パラメータを変更する必要がなく、コンパイラがC++ 17をサポートしている場合は、代わりに 'std :: string_view'を使うべきです。 – zett42

答えて

3

std::stringは、この場合の世話をするコンストラクタを持って見ます起こる。タイプTは、タイプU(例えば、T :: T(U))の単一のパラメータを取り、次に、コンパイラは、コードが暗黙的型Uへ変換することを可能にするコンストラクタを有する

のC++では

docs here

1

は、コンパイラがそれを使用すると、あなたがstd::string引数としてconst char*を通過できるように十分にスマートであるconst char*を受け取るコンストラクタを持っています。

string (const char* s); 

次の作業になりその:長くないとすぐsNULLないよう

char *s = "Hello, World!"; 
std::string str(s); 

を実行エラーをしますhttp://en.cppreference.com/w/cpp/language/implicit_conversion

0

、 T.

を入力すると、次のコード

struct U 
{ 
    //etc. 
} 

struct T 
{ 
    T(U obj); 
    //etc. 
} 

my_func(T param); 

int main() 
{ 
    U u; 

    my_func(u); 
} 

コンパイラは「my_func(U)」になるとmy_funcはタイプTのパラメータを期待していること確認すると、それはT.のコンストラクタを見てを考えてみましょうそれはコンストラクタ "T(U obj);"を見て、それをiそのような関数呼び出し中のn-場所:

//... 
int main() 
{ 
    U u; 

    my_func(T(u)); 
} 

それが事故に行われている場合は、意図的に対立するものとして、いくつかの困難なデバッグにつながることができ、これは完全に黙っに行われていることに注意することが重要です。

関連する問題