6

C++ で次のコードを呼び出したいのですが、これは変更できません。

void getAge(char *name)
{
// do something
}

で呼び出すとgetAge("hello");、次の警告が表示されます。

warning: deprecated conversion from string constant to 'char*'

ただし、C コードでは警告はありません。違いは何ですか? C++ で警告を回避するために呼び出しを変更するにはどうすればよいですか?

4

4 に答える 4

17

機能 […] は変更できません

次に、関数の周りにラッパーを書き、文字列をコピーします。または、運が良ければ (=元の関数内で文字列が変更されないことがわかっている場合)、const-ness を明示的にキャストします。

void getAge(char const* name) {
    the_namespace::getAge(const_cast<char*>(name));
}

関数がそのパラメーターを変更するかどうかわからない場合は、次のようなものを使用してください。ただし、その場合は、文字列リテラル ( getAge("hello")) を使用して関数を呼び出すことは無効になります。

void getAge(char const* name) {
    std::string buffer(name);
    the_namespace::getAge(&buffer[0]);
}

ここでは、文字列を変更可能なバッファにコピーし、最初の文字へのアドレスを元の関数に渡します。

于 2013-06-18T14:13:53.680 に答える
0

試すことができgetAge((char*)"hello")ます。

于 2013-06-18T14:14:45.517 に答える