ホームページ >バックエンド開発 >C++ >C の暗黙的な変換には複数のユーザー定義の変換が含まれる可能性がありますか?

C の暗黙的な変換には複数のユーザー定義の変換が含まれる可能性がありますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-03 16:49:30529ブラウズ

Can Implicit Conversions in C   Involve Multiple User-Defined Conversions?

C の暗黙的変換: 明確化

最近、C の代替キャストに関する以前の回答へのコメントにより、暗黙的変換の精度についての質問が寄せられました。 。明確にするために、次のコード セグメントを調べます。

#include <string>

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

void func( const A &amp; 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 サイトの他の関連記事を参照してください。

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