簡體   English   中英

c ++雙重初始化-默認值?

[英]c++ double initialization- default values?

我正在調試一些 c++ 代碼,並且遇到了一個似乎從未被賦予值的雙精度。 它是用該行聲明的

double x;

以前沒有使用過 c 或 c++,我不確定雙精度值是否具有默認值? 即給定上面的聲明,如果 x 從未被明確地賦予一個值,它會自動為 0,還是為 null?

X 用於代碼中其他地方的計算,計算結果旨在顯示給用戶 - 目前它不是......計算是:

y*asin(sin(x/y)*sin(a*b));

我假設如果 x 默認為 0,這會導致編譯/運行時錯誤嗎? 如果 x 默認為 0,那么計算肯定會返回 0,並且 0 會顯示給用戶嗎?

這取決於聲明變量的位置

如果它被聲明為全局變量,那么它將在main開始運行之前被初始化為零。

如果它在函數內被聲明為非靜態局部變量,那么它的值是不確定的(實際上它將是變量占用的內存中的任何內容,它看起來是隨機的)。

使用未初始化(非靜態)的局部變量會導致未定義的行為

如果聲明為static局部變量,那么它在第一次調用函數時也會被初始化為零。

如果您沒有指定初始化值,那么如果double x在堆/堆棧上,則它的值是未定義的。 如果它是一個全局變量,它將被設置為 0。

在以下情況下執行零初始化:

  1. 對於每個具有靜態或線程本地存儲持續時間且不受常量初始化(自 C++14 起)的命名變量,在任何其他初始化之前。
  2. 作為非類類型和沒有構造函數的值初始化類類型成員的值初始化序列的一部分,包括未提供初始化器的聚合元素的值初始化。
  3. 當使用太短的字符串文字初始化任何字符類型的數組時,數組的其余部分將被初始化為零。

https://en.cppreference.com/w/cpp/language/default_initialization

https://en.cppreference.com/w/cpp/language/zero_initialization

因此,沒有構造函數的類中的雙數據成員將被初始化為零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM