有没有办法在将多个变量传递给函数时将它们隐式转换为类对象?它适用于单个变量,但是当我尝试传递多个变量时,它无法编译。
class B {
public:
B(int x = 20, bool b = false)
{
std::cout << x << " " << b << std::endl;
}
};
void doSomething(B obj) { }
int main() {
doSomething(30);
// doSomething(30,false); // won't compile
...
}
打印
30 0
然后我尝试将它们括在括号中,并编译它,但它预先计算逗号分隔的表达式,因此仅将一个值作为 int 传递。
....
doSomething((30,true));
}
打印
1 0
最佳答案
它无法编译,因为您定义了一个需要一个参数的函数,但随后您尝试通过传递两个参数来调用它。因此,编译器正确地报告错误。
如果将两个参数括在括号中,正如您所注意到的,首先计算逗号表达式,然后构造对象。实际上,就好像您编写了:
doSomething( B( ( 30 , false ) ) )
因此,您可以做的是:
显式构造临时对象:
doSomething( B( 30 , false ) );
或者使用初始化列表:
doSomething( { 30 , false } );
关于c++ - 多个值可以隐式转换为一个对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76989543/