如何在if()语句中声明变量?

时间:2013-01-31 07:52:35

标签: c++

  

可能重复:
  Declaring and initializing a variable in a Conditional or Control statement in C++

而不是......

int value = get_value();
if ( value > 100 )
{
    // Do something with value.
}

......是否可以将的范围缩小到只需要的地方:

if ( int value = get_value() > 100 )
{
    // Obviously this doesn't work. get_value() > 100 returns true,
    // which is implicitly converted to 1 and assigned to value.
}

7 个答案:

答案 0 :(得分:20)

如果您想要特定的值范围,可以引入范围块。

#include <iostream>

int get_value() {
    return 101;
}

int main() {
    {
        int value = get_value();
        if(value > 100)
            std::cout << "Hey!";
    } //value out of scope
}

答案 1 :(得分:12)

你能声明一个变量并在if()语句中进行比较吗?第
您是否可以声明一个变量并以范围与if()块紧密绑定的方式进行比较? 是!


您可以 声明变量:

if (int x = 5) {
   // lol!
}

您可以做事

int x = foo();
if (x == 5) {
   // wahey!
}

你不能同时做到这两点!


可以作弊,你需要做的唯一事情是与true进行比较,因为声明本身会评估新对象的值。

所以,如果你有:

int foo()
{
   return 0;
}

然后这个:

if (int x = foo()) {
    // never reached
}

相当于:

{
   int x = foo();
   if (x) {
       // never reached
   }
}

使用独立范围块的最终语法也是更复杂表达式的核心:

{
   int x = foo();
   if (x > bar()) {
       // wahooza!
   }
}

答案 2 :(得分:6)

把它放在一个函数中:

void goodName(int value) {
    if(value > 100) {
        // Do something with value.
    }
}

//...
    goodName(get_value());

答案 3 :(得分:4)

如何使用for呢?

for (int value = get_value(); value > 100; value = 0) {
    //...
}

如果你想使用C ++ 11,你可以使用lambda:

[](int value = get_value()) {
    if (value > 100) {
        //...
        std::cout << "value:" << value;
    }
}();

答案 4 :(得分:1)

或者你可以为嵌套作用域添加一组额外的大括号,虽然它不是很漂亮:

{
    int value = get_value();
    if ( value > 100 )
    {
        // Do something with value.
    }   
}
//now value is out of scope

答案 5 :(得分:1)

您可以编写一个可以进行比较的小函数,并返回if比较返回true的值,否则返回0以避免执行if块:

int greater_than(int right, int left)
{
   return left > right ? left : 0;
}

然后将其用作:

if ( int value = greater_than(100, get_value()))
{
      //wow!
}

或者您可以使用for作为其他答案说。或者手动放置大括号以减小变量的范围。

无论如何,我会在生产代码中编写此类代码。

不要为机器编写代码。为人类编写代码。只要你遵循他们的语法,机器就能理解任何东西;人类理解他们可读的东西。因此,可读性应优先于不必要的范围。

答案 6 :(得分:0)

在这种特殊情况下,你可以提出它:

if (int value = (get_value() > 100 ? get_value() : 0)) {
    ...
}
但是,我并不是真的推荐它。它不适用于您可能要执行的所有可能的测试,并且它会调用get_value()两次。