ホームページ >バックエンド開発 >C++ >すべての可変引数関数は `float` 引数を `double` に昇格しますか?

すべての可変引数関数は `float` 引数を `double` に昇格しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-23 06:21:16707ブラウズ

Do All Variadic Functions Promote `float` Arguments to `double`?

可変引数関数での float 引数の double への昇格

前の議論で、printf() は float 引数を double に昇格させることに注意しました。それを受け入れる前に倍増します。ここで疑問が生じます: すべての可変個引数関数はこの昇格を実行しますか?

可変個引数の昇格

はい、C99 と C 標準の両方に従って、float 引数は可変個引数に渡されます。関数は double に昇格します。

標準仕様

  • C99 (セクション 6.5.2.2): "float 型の引数は double に昇格されます。"
  • C (セクション 5.2.2): "浮動小数点型は... 前にプロモートされた型に変換されます。 call."
  • C (セクション 4.6): "float 型の prvalue は double 型の prvalue に変換できます。値は変更されません。"

可変個引数関数の cppreference変換

cppreference は、C の可変個引数関数のデフォルト変換の概要を提供します。

  • std::nullptr_t から void*
  • Float 引数から double へ
  • bool、char、short、および列挙

プロモーションの起源

このプロモーションは、潜在的な欠点にもかかわらず、K&R C 標準との互換性のために C に導入されました。 C 理論的根拠には次のように記載されています:

「過去の慣行との互換性を保つため、プロトタイプ宣言がない場合、すべての引数の昇格は K&R で説明されているように行われます。これには、必ずしも望ましいとは限らない float から double への昇格も含まれます。」

以上がすべての可変引数関数は `float` 引数を `double` に昇格しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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