条件运算符会导致代码效率降低吗?

fre*_*low 9 c++ constructor ternary-operator return-value conditional-operator

?:if/else返回对象相比,可能会导致代码效率降低?

Foo if_else()
{
    if (bla)
        return Foo();
    else
        return something_convertible_to_Foo;
}
Run Code Online (Sandbox Code Playgroud)

如果bla为false,则返回Foo直接构造自something_convertible_to_Foo.

Foo question_mark_colon()
{
    return (bla) ? Foo() : something_convertible_to_Foo;
}
Run Code Online (Sandbox Code Playgroud)

这里,returnis 之后的表达式的类型Foo,所以我猜先Foo创建一些临时的,如果bla是false则产生表达式的结果,然后临时必须被复制构造以返回函数的结果.那分析听起来不错?

Den*_*ose 8

临时Foo必须以任何一种方式构造,并且这两种情况都是RVO的明确候选者,所以我认为没有任何理由相信编译器在这种情况下不会产生相同的输出.与往常一样,实际编译代码并查看输出是最佳的操作过程.