可以通过赋值运算符使用初始化列表实例化对象。
为什么我不能将对象与初始化列表进行比较,因为编译器在为对象分配初始化列表时会推断出右手操作数的类型。
#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;
}
我试图了解是否存在比较失败的客观原因。有编译器限制吗?