C の単一操作で複数の暗黙的な変換を適用できますか?

Linda Hamilton
リリース: 2024-11-02 22:22:29
オリジナル
994 人が閲覧しました

Can Multiple Implicit Conversions Be Applied in a Single Operation in 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>
ログイン後にコピー

最初に述べたように、const char* から A への直接変換がないため、最初の関数呼び出しはエラーになります。文字列から A への変換が存在する場合、それを利用するには 2 つの連続した変換が必要になります。

C 標準 (SC22-N-4411.pdf) のセクション 12.3.4 によると、「変換」:

"最大 1 つのユーザー定義変換 (コンストラクターまたは変換関数) が 1 つの値に暗黙的に適用されます。"

これは、指定されたコードでは、コンパイラーが A(const std: の両方のコンストラクターを暗黙的に適用できないことを意味します) :string &) と、const char* から std::string (その後、A に変換される) から引数 "one" への暗黙的な変換です。

したがって、最初の関数呼び出しは次のようになります。エラーとなる結果は正しいです。 C 標準では、暗黙的なユーザー定義変換は 1 つだけ許可されるため、コンパイラーが関数のパラメーターの型を満たすために必要な手順を実行できなくなると明示的に規定されています。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート