ホームページ  >  記事  >  バックエンド開発  >  `func(\"one\")` が C の暗黙的な変換でエラーを引き起こすのはなぜですか?

`func(\"one\")` が C の暗黙的な変換でエラーを引き起こすのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-01 05:36:02374ブラウズ

Why does `func(

C 暗黙的変換

C のコンテキストでは、暗黙的変換の概念が議論の対象となってきました。 「C で使用できる他の便利なキャストは何ですか?」に関する最近の回答

次のコード スニペットを考えてみましょう。

<code class="cpp">#include <string>

struct A {
    A(const std::string &s) {}
};

void func(const A &a) {
}

int main() {
    func("one");                  // error
    func(A("two"));           // ok
    func(std::string("three"));   // ok
}</code>

このスニペットでは、最初の関数呼び出し func("one") の結果は次のようになります。エラーです。これは、const char * から A への直接変換がないためです。文字列から A への変換はありますが、それを使用すると複数の暗黙的な変換が必要となり、C 標準に従って許可されていません。

C 標準 (SC22-N-4411.pdf) のセクション 12.3.4「変換」には次のように記載されています:

4 At most one user-defined conversion (constructor or conversion function) is implicitly applied to a single value.

これは、変換を実行するときに適用できる暗黙的なユーザー定義変換は 1 つだけであることを意味します。最初の関数呼び出しでは、const char * から string への変換と string から A への変換の両方がユーザー定義の変換です。複数の変換が必要なため、コンパイラはエラーを発生させます。

以上が`func(\"one\")` が C の暗黙的な変換でエラーを引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。