我见过像
这样的代码方法1
for(int i = 0; i < 200; ++i) {
do_some_stuff(i);
}
方法2
const int max_limit = 200;
for(int i = 0; i < max_limit; ++i) {
do_some_stuff(i);
}
Approach 2
优于Approach 1
是否有任何好处?
答案 0 :(得分:2)
那就是说,如果要替换这样的东西:
for(int i = 0; i < something.size(); ++i) {
do_some_stuff(i);
}
与
const int something_sz = something.size();
for(int i = 0; i < something_sz; ++i) {
do_some_stuff(i);
}
然后还有一个额外的好处,它使读者和编译器明白something.size()
对do_some_stuff(i)
的调用没有改变。
答案 1 :(得分:0)
在您的示例中,在代码中的任何位置使用幻数(例如200
)都值得关注。它使代码更难理解和维护。
如果变量被恰当地命名,方法2会更好。 max_limit
没有比200
更多的含义。但是,如果您使用max_number_of_books
,则它比200
更有意义。
答案 2 :(得分:0)
对我来说,方法2更好,当你定义一个类似const int max_num_of_students
的const时,它看起来更有意义,并且有人阅读该代码,可以很容易地理解发生了什么。
在循环中使用此类const
的另一个好处是,如果您打印的学生名称不止一次,则每次学生数量获得时,您都不需要更改循环中的条件增加。转到您的变量并将其更改为新的学生计数。
答案 3 :(得分:0)
根据我的观点,方法2更好。
可读性得到增强。
例如:
int currentPortNo=getPortNo();
const int inputPort=80;
if(currentPortNo == inputPort){
//Get input from port
}
与以下相比:
int currentPortNo=getPortNo();
if(currentPortNo == 80){
//Get input from port
}
可维护性得到了增强,因为如果我们想要inputPort
,由于新的要求/限制,应该使用81
而不是80
进行初始化(更改)我们可以简单地使用:
const int inputPort=81;
而不是在整个程序中使用值80
的所有场合。
此外,如果您需要在程序周围传递指针。
可以范围和输入属性
答案 4 :(得分:0)
我们应该避免在编写代码时随时使用magic number
。因为如果您仅使用数字200
,则其他人可能无法理解您的代码&#39;意图很好。但是当您使用const int max_limit = 200;
时,我们可以理解200
的数字含义。特别是当您的代码非常复杂时,您必须使用第二种方式编写代码。
答案 5 :(得分:0)
第二种方法更好,因此你也可以从用户那里获得价值:
cin>>max_limit;