将对象与初始化列表进行比较

时间:2016-12-28 06:06:47

标签: c++

可以通过赋值运算符使用初始化列表实例化对象。

为什么我不能将对象与初始化列表进行比较,因为编译器在为对象分配初始化列表时会推断出右手操作数的类型。

#include <string>
#include <map>

class FileInfo
{
public:
    FileInfo(const std::string &name) : mName(name) { }

    bool operator == (const FileInfo& other) const
    {
        return mName == other.mName;
    }

private:
    std::string mName;
};

int main(int argc, char *argv[])
{
    FileInfo f1 = { "f1" };
    FileInfo f2 = { "f2" };

    if (f1 == f2) {} // OK

    if (f1 == { "f2" }) {} // C2059 syntax error: ')'

    if ((f1 = { "f1" }) == f2) { } // OK

    if (f1 == FileInfo{ "f2" }) {} // OK

    return 0;
}

我试图了解是否存在比较失败的客观原因。有编译器限制吗?

0 个答案:

没有答案