【发布时间】:2018-09-28 11:40:18
【问题描述】:
考虑以下代码:
class Foo
{
public:
//class-specific
Foo operator+(Foo& rhs)
{
return Foo(); //Just return a temporary
}
void* operator new(size_t sd)
{
return malloc(sd);
}
};
//global
Foo operator+(Foo& lhs, Foo& rhs)
{
return Foo();
}
void* operator new(size_t sd)
{
return malloc(sd);
}
此代码无法编译,说明调用不明确,因为它匹配两个运算符:
Foo a, b;
a + b;
但是这个带有 new 运算符的编译器很好,并且会调用特定于类的那个。
Foo* a = new Foo();
为什么不会导致编译错误?编译器是否以不同的方式对待 new 运算符? (任何对该标准的引用将不胜感激。)
【问题讨论】:
标签: c++ c++11 c++14 language-lawyer new-operator