多个值可以隐式转换为一个对象吗?

问题描述 投票:0回答:1

有没有办法在将多个变量传递给函数时将它们隐式转换为类对象?它适用于单个变量,但是当我尝试传递多个变量时,它无法编译。

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

c++ implicit-conversion
1个回答
0
投票

它无法编译,因为您定义了一个需要 one 参数的函数,但随后您尝试通过传递 two 来调用它。因此,编译器正确地报告错误。

如果将两个参数括在括号中,正如您所注意到的,首先计算逗号表达式,然后构造对象。实际上,就好像你写了:

doSomething( B( ( 30 , false ) ) )

因此,你能做的是:

  1. 显式构造一个临时对象:

    doSomething( B( 30 , false ) );

  2. 或者使用初始化列表:

    doSomething( { 30 , false } );

© www.soinside.com 2019 - 2024. All rights reserved.