我正在做C ++作业,我看到一个奇怪的语法:
class A{
private:
string name;
public:
A(string n) :name(n){}
friend bool operator < (const class A& a1, const class A &a2);
}
函数class
的声明中有operator <
个关键字。我以前从未见过。这是一个好习惯吗,还是我们只需要删除class
关键字即可?
答案 0 :(得分:3)
它们是合法的,通常不是必需的。
仅当A
是什么时有歧义时才需要。
例如:
#include <string>
extern void A();
class A
{
private:
std::string name;
public:
A(std::string n) :name(n){}
friend bool operator < (const class A& a1, const class A &a2);
};
// removing `class` here would result in a compiler error as it would be
// ambiguous as to whether you meant the function A or the class A
bool operator < (const class A& a1, const class A &a2)
{
return a1.name < a2.name;
};