这是我的代码。
#include<iostream>
#include<string>
struct Sales_data {
Sales_data() = default;
std::string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
};
int main()
{
bool a = true;
if (Sales_data item, a)
std::cout << a << std::endl;
}
我不知道为什么编译器告诉我表达式必须有bool类型(或者可以转换为bool)。
答案 0 :(得分:2)
因为它不是有效的语法。它被解释为两个变量的声明(因此,
不是这里的逗号运算符),你不能在if条件中使用它。
您正在尝试使用以下语法在C ++ 17中尝试:
if (Sales_data item; a)
直到那时,如果你想要一个变量作为范围,你可以这样做:
if (a)
{
Sales_data item;
...
}
或者,如果您需要条件中的变量,则可以创建一个封闭范围:
{
Sales_data item;
if (item == ...)
{
...
}
} // item is destructed here
答案 1 :(得分:1)
因为那不是有效的if语句。在任何情况下,它都不是任何形式的有效声明。这也是无效的:
bool a;
Sales_data item, a; // what does this mean?!
这是无效的:
bool a;
bool b = Sales_data item, a; // ???
在C ++ 17中,你可以做你想要的,但使用不同的语法:
if (Sales_data item; a)
...
这类似于for
语句中的初始值设定项:
for (Sales_item item; expr; expr)
...
语句必须用;
分隔,不能用逗号分隔。