为什么选择向 int 的转换而不是向矢量的转换<int>

问题描述 投票:0回答:1
struct A
{
    A(std::vector<int> x):
    x_(std::move(x)) {}

    inline operator std::vector<int>()
    {
        return x_;
    }

    inline operator int()
    {
        return x_[0];
    }
    std::vector<int> x_;
};

A add()
{
    return A({1,2,3,4});
}



int main()
{
    std::vector<int> b{add()};
}

在上面的代码中,

b
将只有 1 个元素,这意味着转换
A->int
是通过
A->vector<int>
选择的。这是为什么?

是因为在构造initializer_list时,两种转换都有效,所以它选择了一个

A->int

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

std::vector
有一个接受
std::initialize_list
的构造函数。当类具有这样的构造函数时,如果可能的话,在使用大括号初始化时将始终选择该重载。在这种情况下,如果
add()
的结果转换为
int
,那么它就是可能的。如果您尝试
b(add());
,您将获得
add()
结果的副本:https://godbolt.org/z/8TqMEfeYf

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