我可以在C ++中的条件语句中声明两个变量。编译器给出了错误,但我认为我应该得到一个意见:
int main()
{
double d1 = 0;
if((double d2 = d1) || (double d3 = 10))
cout << "wow" << endl;
return 0;
}
答案 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) {
// ...
}
但是,我从未在实际代码中看到过这种风格。我认为总是有一种更清晰的方式来写同样的东西。
此外,不支持尝试在if
或while
语句的条件部分声明多个变量。您将不得不求助于嵌套的if
或else if
来获得相同的语义。
示例:
if (double d2 = d1) {
cout << "wow" << endl;
} else if (double d3 = 10) {
cout << "wow" << endl;
}
这种方式只有在d3
评估为false时才会创建d2
。