[解決済み] float a = 3.0;' は正しい文か?
2023-04-30 17:34:37
質問
以下のような宣言があった場合。
float a = 3.0 ;
はエラーになるのか?ある本で読んだのですが
3.0
は
double
の値として指定しなければならないこと。
float a = 3.0f
. そうなのでしょうか?
どのように解決するのですか?
を宣言することはエラーではありません。
float a = 3.0
と宣言してもエラーにはなりませんが、そうするとコンパイラが3.0のダブルリテラルをフロートに変換してしまいます。
しかし、あなたは でなければなりません。 は特定のシナリオでfloatリテラル表記を使用します。
-
パフォーマンスのため。
具体的には、以下のように考えてください。
float foo(float x) { return x * 0.42; }
ここで、コンパイラはそれぞれの戻り値に対して(実行時に支払うことになる)変換を出力します。それを避けるために、宣言する必要があります。
float foo(float x) { return x * 0.42f; } // OK, no conversion required
-
結果比較時のバグを回避するため。
例えば、次の比較は失敗します。
float x = 4.2; if (x == 4.2) std::cout << "oops"; // Not executed!
float リテラル記法で修正できます.
if (x == 4.2f) std::cout << "ok !"; // Executed!
(注)もちろん は浮動小数点数または倍数を等しく比較する方法ではありません。 )
-
正しいオーバーロードされた関数を呼び出すため(同じ理由で)。
例
void foo(float f) { std::cout << "\nfloat"; } void foo(double d) { std::cout << "\ndouble"; } int main() { foo(42.0); // calls double overload foo(42.0f); // calls float overload return 0; }
-
サイバーが指摘するように を推論するのを助けることが必要です。
float
:の場合
auto
:auto d = 3; // int auto e = 3.0; // double auto f = 3.0f; // float
また、同様に、テンプレート型控除の場合 :
void foo(float f) { std::cout << "\nfloat"; } void foo(double d) { std::cout << "\ndouble"; } template<typename T> void bar(T t) { foo(t); } int main() { bar(42.0); // Deduce double bar(42.0f); // Deduce float return 0; }
関連
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] C++で仮想関数が必要な理由とは?
-
[解決済み] switch文の中で変数を宣言してはいけないのはなぜですか?
-
[解決済み] C++11のT&&(ダブルアンパサンド)の意味とは?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み】'std::cout'への未定義の参照