C の暗黙的変換: 明確化
最近、C の代替キャストに関する以前の回答へのコメントにより、暗黙的変換の精度についての質問が寄せられました。 。明確にするために、次のコード セグメントを調べます。
#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 }
元々、const char * から A への直接変換が存在しないため、最初の関数呼び出しでエラーが発生すると主張されていました。 、文字列から A への変換があります。この変換を利用するには複数の手順が必要となり、通常は禁止されています。この主張は g 4.4.0 および Comeau コンパイラによってサポートされています。
さらなる調査により、C 標準 (12.3.4) はこの問題に光を当て、最大 1 つのユーザー定義変換 (コンストラクターまたは変換関数) を単一の値 に暗黙的に適用できます。この規則は、観察された動作と一致しており、暗黙的な変換の制限を明確にしています。
要約すると、単一の値に対して許可される暗黙的なユーザー定義変換は 1 つだけです。提供されたコードでは、 func("one") の呼び出しは失敗します。これは、許可されていない複数の暗黙的な変換が必要となるためです。
以上がC の暗黙的な変換には複数のユーザー定義の変換が含まれる可能性がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。