在条件中声明两个变量?

时间:2010-07-18 19:04:55

标签: c++ conditional declaration

我可以在C ++中的条件语句中声明两个变量。编译器给出了错误,但我认为我应该得到一个意见:

int main()
{
    double d1 = 0;
    if((double d2 = d1) || (double d3 = 10))
        cout << "wow" << endl;
    return 0;
}

6 个答案:

答案 0 :(得分:5)

您只能为一个变量

执行此操作
if(double d2 = d1)
    cout << "wow" << endl;
else 
if(double d3 = 10)
    cout << "wow" << endl;

但我会在条件之外宣布它们。如果你害怕范围,你可以随时限制它:

{
  double d2 = d1;
  double d3 = 10;
  if(d2 || d3)
    cout << "wow" << endl;
}

当然,即使d2的计算结果为true,它也会评估第二个初始值设定项。但我认为这并不重要。

答案 1 :(得分:3)

if((double d2 = d1) || (double d3 = 10))
    cout << d2 + d3 << endl;

||运算符短路,因此d2 + d3表达式引用(可能)未初始化的d3。这样的功能会产生很多不良影响,IMO没有任何好处,所以这可能就是为什么它不存在。

答案 2 :(得分:1)

可能还有其他东西在这里打扰你,但是|| -operator的工作方式存在问题。我不记得标准中的确切含义,但在a || b中,如果b的计算结果为true,则编译器不评估a,或者您的编译器可以选择不这样做。

考虑到这一点,在你的语句中你不确定你的变量是否已被声明 - 在C ++中你只能使用声明的变量,所以d3在你的例子中将是一个非常无用的变量,如果你问的话我(因为你不确定它是否已被宣布)。

答案 3 :(得分:0)

这在C ++中是不可能的,也许您正在考虑使用C#或更新的编程语言。在条件之外声明d2和d3没有缺点。

答案 4 :(得分:0)

您可能想询问C ++标准文档的位置。

我认为这不是一个好主意,你要做的是告诉编译器:

声明d2 把d1放在d2中 将d2与0进行比较 如果它是!= 0跳转到下面的代码 其他 宣布d3 在d3中放入10 将d2与0进行比较 如果它是!= 0跳转到下面的代码 其他 跳过下面的代码

只有当你使用有限的内存(并且不希望在达到这段代码之前为d2和d3分配空间)时,只是声明条件上方的d2和d3可能是一个好主意。 这一切都归结为你真正打算做的事情。

答案 5 :(得分:0)

在C ++中你可以这样做:

if (bool b = (a == b)) {
  // Do something with b here...
}

或:

if (double d2 = d1) {
  // ...
}

但是,我从未在实际代码中看到过这种风格。我认为总是有一种更清晰的方式来写同样的东西。

此外,不支持尝试在ifwhile语句的条件部分声明多个变量。您将不得不求助于嵌套的ifelse if来获得相同的语义。

示例:

if (double d2 = d1) {
  cout << "wow" << endl;
} else if (double d3 = 10) {
  cout << "wow" << endl;
}

这种方式只有在d3评估为false时才会创建d2