ホームページ  >  記事  >  バックエンド開発  >  複数の暗黙的なユーザー定義変換を C に適用できますか?

複数の暗黙的なユーザー定義変換を C に適用できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-31 22:09:02971ブラウズ

Can Multiple Implicit User-Defined Conversions Be Applied in C  ?

C の暗黙的な変換: 明確化

最近の議論では、C での暗黙的な変換の妥当性が疑問視されています。具体的には、この問題は複数の暗黙的なユーザー定義変換が許可されるかどうかを中心に展開します。この問題を明らかにするために、次のコードを調べてみましょう:

<code class="cpp">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>

元の質問で述べたように、const char * から A への変換がないため、最初の関数呼び出しではエラーが発生します。文字列から A への変換が存在する場合、これを適用することは複数の変換を伴いますが、これは許可されていません。これは C 標準によって裏付けられています:

<code class="cpp">4 At most one user-defined conversion (constructor or conversion function) is implicitly applied to a single value.</code>

この場合、2 つの暗黙的な変換 (文字列から const char へ、および const char から A) の存在がこのルールに違反し、次のような結果が生じます。コンパイラエラー。したがって、C では複数の暗黙的なユーザー定義変換が禁止されているという主張は正確です。

以上が複数の暗黙的なユーザー定義変換を C に適用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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