for循环中的const值

时间:2015-08-11 04:57:53

标签: c++ for-loop const

我见过像

这样的代码

方法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是否有任何好处?

6 个答案:

答案 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更好。

  1. 可读性得到增强。

    例如:

    int currentPortNo=getPortNo();
    const int inputPort=80;
    
    if(currentPortNo == inputPort){
    //Get input from port
    }
    

    与以下相比:

    int currentPortNo=getPortNo();
    
    if(currentPortNo == 80){
    //Get input from port
    }
    
  2. 可维护性得到了增强,因为如果我们想要inputPort,由于新的要求/限制,应该使用81而不是80进行初始化(更改)我们可以简单地使用:

    const int inputPort=81;
    

    而不是在整个程序中使用值80的所有场合。

  3. 此外,如果您需要在程序周围传递指针

  4. 可以范围输入属性

答案 4 :(得分:0)

我们应该避免在编写代码时随时使用magic number。因为如果您仅使用数字200,则其他人可能无法理解您的代码&#39;意图很好。但是当您使用const int max_limit = 200;时,我们可以理解200的数字含义。特别是当您的代码非常复杂时,您必须使用第二种方式编写代码。

答案 5 :(得分:0)

第二种方法更好,因此你也可以从用户那里获得价值:

cin>>max_limit;