![](/img/trans.png)
[英]In C++, is it better to use #define or const to avoid magic numbers?
[英]How to avoid magic strings and magic numbers in C++
如何避免在以下代碼中使用魔術字符串和數字:
void Trainee::setScores() {
m_scores["C++"] = rand() % 100;
m_scores["Java"] = rand() % 100;
m_scores["Linux"] = rand() % 100;
m_scores["QtQML"] = rand() % 100;
m_scores["PSD"] = rand() % 100;
}
您可以在* .cpp文件的匿名名稱空間中使用constexpr變量(例如C中的靜態變量)
namespace
{
constexpr std::string cpp { "C++" };
}
void Trainee::setScores()
{
m_scores[cpp] =
}
如果m_scores是一個std :: map,看起來,您可以簡單地瀏覽其所有內容:
for( auto & score : m_scores ) {
score = rand() % 100;
}
另外,您可以添加一個函數來設置和保存模數在Trainee的成員變量中:
void Trainee::setScoresModulus( int modulus )
{
m_modulus = modulus;
}
然后具有:
void Trainee::setScores() {
for( auto & score : m_scores ) {
score = rand() % m_modulus;
}
}
編輯:我想念地圖是在此函數中構造的。 提供所有分數名稱的列表是一種解決方案:
void Trainee::setScores( vector<string> const& names ) {
m_scores.clear();
for( auto const& name : names ) {
m_scores[ name ] = rand() % m_modulus;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.