[英]Declaring constants or using numbers inside the code
所以,我有這個C ++測試,老師很難聲明常量,而不是直接在代碼中使用數字。 在下面的例子中,我甚至將ZERO聲明為常量。
這是不必要的還是這是一件好事? 這種方式會占用更多內存還是使代碼“變慢”?
int main() {
int kmStart, kmEnd;
const int ZERO = 0;
cout << "Starting Kms? ";
cin >> kmStart;
cout << "Ending Kms? ";
cin >> kmEnd;
while (kmStart < ZERO || kmStart > kmEnd) {
cout << "Invalid Input!" << endl << endl;
cout << "Starting Kms? ";
cin >> kmStart;
cout << "Ending Kms? ";
cin >> kmEnd;
}
}
constexpr int ZERO = 0;
幾乎肯定會完全編譯出來。
請注意新的關鍵字constexpr
,從C ++ 11開始。
對於你當前的代碼, ZERO
可能被編譯出來,但即使它沒有任何性能下降也可以忽略不計。 輸入/輸出功能。
我想知道為什么你的老師認為ZERO
比0
更清楚。 當他們看到0
時,每個人都知道他們正在處理什么。 例如, ZERO
可能意味着'0'
,甚至是"0"
,它們是完全不同的野獸:在調試時,你總是要檢查代碼。
對於長壽命應用程序的開發,必須使用正確命名的常量。 管理普通的數字文字很快就會失控。 請考慮以下示例:
foo(42);
bar(42);
它有幾個問題:
42
是巧合還是我們故意傳遞相同的值 如果您的應用程序包含數百個文件,那將是一個字面上的噩夢。
因此,如果使用常量,則可能會變為示例代碼段
constexpr int const fast_foobing_rate{42};
constexpr int const slow_barring_coeff{42};
foo(fast_foobing_rate);
bar(slow_barring_coeff);
要么
constexpr int const days_in_week_count{7};
constexpr int const frobbing_weeks_count{6};
inline constexpr int get_frob_repetitions_count(void) noexcept
{
return(days_in_week_count * frobbing_weeks_count);
}
foo(get_frob_repetitions_count());
bar(get_frob_repetitions_count());
所以現在:
有了所有這些好處,我們就不會受到性能損失的影響。 根據常量類型,甚至可以為性能帶來一些好處。
通常,直接在代碼中使用常量而不是數字可以使代碼更易讀,更易於維護。
請考慮以下示例:
例如,你有一種時間為0.1秒的模擬,你需要在源代碼的不同位置使用這個時間步長值,那么使用它會更容易
const double timesstep = 0.1
而不是每個地方寫0.1。
優勢是:
但在你的情況下,我認為使用0而不是零更可讀,或者你將它重命名為更具表現力的東西,如“minimum_start”或類似的東西......
Personnaly,對於整數常量我使用枚舉(source == Scott Meyer,Effective C ++):
int main (int argc, char* argv []) {
enum Constant {
NTRY = 32,
NEQ = 8,
SMAX = 200000000,
ALERT = 65536
};
size_t ntry (Constant::NTRY);
std::cout << "ntry == " << ntry << std::endl;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.