【问题标题】:If statement with {} and without {} inside a For loop在 For 循环中带有 {} 且不带 {} 的 If 语句
【发布时间】:2013-03-11 12:46:26
【问题描述】:

我在向量中有一个队列循环,我需要在队列循环中搜索以找到最小索引队列和最大大小队列。

我正在使用以下代码

int min_index = 0;
int max_size = -1;
std::size_t size = q.size();
for( i=0; i<size; i++){ //accessing loop of queues
    if(q[min_index].size() > q[i].size())
        min_index = i; // Now q[min_index] is min_index is the minimum size queue
    if(q[i].size() > max_size)
        max_size = q[i].size(); // maximum size queue
} 

我有点怀疑是否对每个if statement 使用{},如下面的代码

int min_index = 0;
    int max_size = -1;
    std::size_t size = q.size();
    for( i=0; i<size; i++){ //accessing loop of queues
        if(q[min_index].size() > q[i].size()){
            min_index = i; // Now q[min_index] is the shortest queue
              }
        if(q[i].size() > max_size){
            max_size = q[i].size(); // longest queue        
            } 
}

哪个是正确的,有和没有{} 会有什么区别。对不起,如果这是一个愚蠢的问题。我是编程新手。

【问题讨论】:

标签: c++ loops if-statement for-loop


【解决方案1】:

在您的情况下,两个代码之间没有区别

if(SOMETHING)
   DO_SOMETHING;

相同
if(SOMETHING) {
   DO_SOMETHING;
}

但是

 if(SOMETHING)
   DO_SOMETHING_1;
   DO_SOMETHING_2;   //DO_SOMETHING_2 will be performed whether the `if` condition
                     //is satisfied or not 

相同
 if(SOMETHING) {
   DO_SOMETHING_1;
   DO_SOMETHING_2;   //DO_SOMETHING_2 will be performed only if the `if` condition
 }                   //is satisfied, since it is inside the curly parentheses

在您的情况下,由于if 块仅包含一个语句,因此不需要大括号(如果您感到困惑,建议使用它们来澄清事情)。 .

【讨论】:

    【解决方案2】:

    通常,应用的最佳规则是:

    如有任何疑问,请使用 {}

    () 也是如此

    但在你的情况下,两者都是等价的。

    【讨论】:

      【解决方案3】:

      它们的运行方式相同,但如果您需要返回并在 if 语句后有多行代码,则有些人更喜欢以这种方式使用 {},而不必添加 {}。

      【讨论】:

      • 最初省略 {} 并不意味着您以后不能添加它们。
      • 我知道,我只是讨厌返回并添加它们,然后添加新的代码行......我个人可以告诉我何时需要在 if 语句之后超过 1 行但是如果你不能,那么我建议他只添加它们,这样他就不必稍后再添加它们。不过,这个问题纯粹是基于偏好的。
      【解决方案4】:

      以这种方式使用的括号称为块语句,用于封装一个或多个语句。一个这样的块等于一个语句,它满足解析器期望一个语句作为if 语句的主体。

      所以不,两者之间真的没有区别。在一个你有一个单一的语句,在另一种单一的语句中,恰好包含其他语句。

      【讨论】:

        【解决方案5】:

        没有区别:

        int min_index = 0;
        int max_size = -1;
        std::size_t size = q.size();
        for( i=0; i<size; i++){ //accessing loop of queues
            if(q[min_index].size() > q[i].size())
                min_index = i; // Now q[min_index] is min_index is the minimum size queue
            if(q[i].size() > max_size)
                max_size = q[i].size(); // maximum size queue
        }
        

        唯一的区别是如果你想在 if 中写多于一行,例如

        if(q[min_index].size() > q[i].size())
                min_index = i;
                ++i;
        

        在这种情况下,如果您的 if(q[min_index].size() &gt; q[i].size()) 为真,则只会调用 min_index = i; 行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多