声明常数或在代码中使用数字
Declaring constants or using numbers inside the code
所以,我有这个C 测试,而老师确实很难声明常数,而不是直接在代码中使用数字。在下面的示例中,我什至将零声明为常数。
这是不必要的还是这是一件好事?这种方式是否占用更多内存或使代码"慢"?
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个值来自
- 不可能猜测两个函数调用中的
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。
优势是:
- 如果要更改值,则只能更改一行timestep
- 如果您知道常数含义 ,则代码变得更加可读
但是,就您而言,我认为使用0而不是零更可读,或者将其重命名为" Minimum_start"或类似的内容...
personaly,对于整数常数,我正在使用枚举(source == Scott Meyer,有效的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;
}
相关文章:
- 如何修复我的最大公约数代码?它适用于除零和零以外的所有数字
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- 无法理解代码背后的逻辑,这是在两个给定数字之间生成素数的优化问题
- 有人可以解释我这个代码吗?它给出与我们输入的数字相反
- 我怎么不能按课程代码的降序对数字进行排序
- 为什么当我在 c++ 中运行函数时,我的代码显示数字 53
- 代码以查找数组中的最大数字,但它仅将第一个数字显示为最大数字. 有人请告诉我为什么
- 为什么这个代码不适用于大数字
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- 下面的代码是如何工作的?它输出分解的数字并且功能齐全,我只是不明白它是如何做到的
- Cpp代码故障(显示意外数字)
- 如何让我的代码显示文件名不正确或文件中数字的平均值?
- 试图找到一个数字的平方根,但代码不起作用。C++
- 上一个较大的数字代码中的输出不正确
- 相同的数字代码返回不同的输出,无论是 C++ 还是 C
- visual c++中,没有编译器优化的数字代码会给出错误的结果
- C++字母等效数字代码的睡眠时间
- C++字母等效数字代码输出程序
- 如何获取键盘按键值(或数字/代码)