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 サイトの他の関連記事を参照してください。