成员初始化列表中的条件运算符

时间:2010-02-05 09:59:33

标签: c++

假设我有这门课程:

class foo
{
public:
    foo() { }
    foo(const std::string& s) : _s(s) { }

private:
    std::string _s;
};

哪个是另一个班级的成员:

class bar
{
public:
    bar(bool condition) : 
       _f(condition ? "go to string constructor" : **go to empty ctor**) 
    { 
    }

private:
    foo _f;
};

_f的成员初始化列表中初始化bar时,我想根据foo选择要调用condition的构造函数。

我可以用什么而不是go to empty ctor来完成这项工作?我想过放foo(),还有另外一种方法吗?

2 个答案:

答案 0 :(得分:16)

条件运算符的结果始终是在编译时通过查找两个选项都可以转换为的公共类型确定的固定类型。 (确切的规则有点涉及,但通常使用它通常“做正确的事情”。)

在您的示例中,最简单的方法是让该类型为临时foo,然后使用复制构造函数初始化栏中的_f

您可以按照以下方式执行此操作。

_f( condition ? foo("string") : foo() )

答案 1 :(得分:0)

如果传递空字符串相当于调用no-arg构造函数,则可以执行以下操作:

_f(condition ? "string" : "")

这样可以保存副本。