std :: vector :: operator []不测试类型

时间:2012-07-20 20:35:26

标签: c++ vector type-conversion

我有这样的结构:

struct VrtxPros{
    long idx;
    std::vector<std::string> pros;
    VrtxPros(const long& _idx=-1, const std::string& val="") : idx(_idx)
    {
         if ( !val.empty() && val!="" )
             pros.push_back(val);
    }
};

以后在代码中我使用它:

long idx = 1234;
VrtxPros vp( 2134, std::string("-1") );
if ( margin ) vp.pros[0] = idx;

编译器没有问题。我很想知道因为运营商应该提供参考。 operator= std::string {{1}} {{1}},我会接受长作为来源。

为什么代码会编译?

2 个答案:

答案 0 :(得分:5)

可以将std::string分配给charlong可以隐式转换为char,因此可以将std::string分配给long一个operator=。你的编译器可能会发出关于这种隐式转换的警告(如果你还没有,你会看到警告级别,你会看到它)。

请参阅列出的{4} std::string wow; wow = 7ull; // implicit unsigned long long to char conversion wow = 1.3f; // implicit float to char conversion here。注意没有constructor overload只接受一个char,所以这种事情只能用于赋值。

就此而言,您也可以这样做:

{{1}}

答案 1 :(得分:1)

使用-Wconversion for g ++获取从long到char的隐式转换的警告。