操作员的问题== 在下面C++程序中,使用运算符==我面临一些问题。 #include < iostream> using namespace std; class A { public: A(char *b) { a = b; } A(A &c) { a = c.a; } bool operator ==(A &other) { return strcmp(a, other.a); } private: char *a; }; int main() { A obj("test"); A obj1("test1"); if(obj1 == A("test1")) { cout<<"This is true"<<endl; } }

操作员的问题== 在下面C++程序中,使用运算符==我面临一些问题。 #include < iostream> using namespace std; class A { public: A(char *b) { a = b; } A(A &c) { a = c.a; } bool operator ==(A &other) { return strcmp(a, other.a); } private: char *a; }; int main() { A obj("test"); A obj1("test1"); if(obj1 == A("test1")) { cout<<"This is true"<<endl; } },c++,operators,equals-operator,C++,Operators,Equals Operator,ifobj1==Atest1行有什么问题??感谢您的帮助 bool operator ==( const A &other) 使用const引用,以便在if语句中构造的临时对象可以用作运算符==的参数 使用const reference,以便在if语句中构造的临时对象可以用作运算符==的参数。strcmp在字符串相等时返回0,因此需要: return strcmp(a, other.a) == 0; 你也应该像Cătălin Pitiș在他的回答中说的那样使用常量引用,因为这样你就可

ifobj1==Atest1行有什么问题??感谢您的帮助

bool operator ==( const A &other)
使用const引用,以便在if语句中构造的临时对象可以用作运算符==的参数

使用const reference,以便在if语句中构造的临时对象可以用作运算符==的参数。

strcmp在字符串相等时返回0,因此需要:

return strcmp(a, other.a) == 0;
你也应该像Cătălin Pitiș在他的回答中说的那样使用常量引用,因为这样你就可以在操作符中使用临时对象,你还应该使方法本身常量,因为它不会像Andreas Brinck在下面的评论中所说的那样修改对象。因此,您的方法应该是:

bool operator ==(const A &other) const
{
        return strcmp(a, other.a) == 0;
}
当字符串相等时,strcmp返回0,因此需要:

return strcmp(a, other.a) == 0;
你也应该像Cătălin Pitiș在他的回答中说的那样使用常量引用,因为这样你就可以在操作符中使用临时对象,你还应该使方法本身常量,因为它不会像Andreas Brinck在下面的评论中所说的那样修改对象。因此,您的方法应该是:

bool operator ==(const A &other) const
{
        return strcmp(a, other.a) == 0;
}

在我看来,您希望在您的接线员中包含以下内容:

strcmp(a, other.a) == 0

字符串匹配时,strcmp返回0,以及一个数字,指示比较是大于还是小于其他值。

在我看来,您希望运算符中包含以下内容:

strcmp(a, other.a) == 0

当字符串匹配时,strcmp返回0,一个数字指示比较是大于还是小于其他值。

您的错误是创建一个即时值并将其作为引用传递给运算符==方法。但您的错误在运算符定义中,应该是:

bool operator ==(const A &other) const
{
        return strcmp(a, other.a) == 0;
}
布尔运算符==常数A和其他常数


主体相同。

您的错误是创建了一个即时值,并将其作为引用传递给运算符==方法。但您的错误在运算符定义中,应该是:

bool operator ==(const A &other) const
{
        return strcmp(a, other.a) == 0;
}
布尔运算符==常数A和其他常数


主体相同。

函数也应为常量:布尔运算符==常量A和其他常量函数也应为常量:布尔运算符==常量A和其他常量谢谢您的快速响应!!我观察到的一件事是,为了使其工作,copy构造函数参数也应设为const。A&C你能举例说明答案吗?@Graeme Perrow:这没有错。strcmp还有一个问题,但是如果没有这个答案中的更改,它甚至无法编译。@Graeme:这是正确的答案。我引用的问题是:ifobj1==Atest1行有什么问题?。strcmp也有问题,但不是问题所在……OP希望看到输出是正确的——原始代码没有打印它。我将原始代码复制到一个文件以验证这一点@它编译成功了。我添加了const行并重建了它,但它仍然没有打印任何内容,这意味着您的答案并没有解决问题。如果我在Mike Weller的答案中更改了strcmp,那么无论是否添加常量,输出都是正确的。感谢您的快速响应!!我观察到的一件事是,为了使其工作,copy构造函数参数也应设为const。A&C你能举例说明答案吗?@Graeme Perrow:这没有错。strcmp还有一个问题,但是如果没有这个答案中的更改,它甚至无法编译。@Graeme:这是正确的答案。我引用的问题是:ifobj1==Atest1行有什么问题?。strcmp也有问题,但不是问题所在……OP希望看到输出是正确的——原始代码没有打印它。我将原始代码复制到一个文件以验证这一点@它编译成功了。我添加了const行并重建了它,但它仍然没有打印任何内容,这意味着您的答案并没有解决问题。如果我在Mike Weller的答案中更改了strcmp,那么无论是否添加常量,输出都是正确的。添加常量内容绝对是个好主意,只需添加与主体相同的常量,就会导致与原始程序相同的错误行为。更正:在某些平台上,const不仅仅是一个好主意,它是必需的。Mike的strcmp更改仍然是正确行为所必需的。添加const内容绝对是一个好主意,只需添加与主体相同的const,就会产生与原始程序相同的错误行为。更正:在某些平台上,const内容不仅仅是一个好主意,它是必需的。迈克的strcmp更换仍然是正确行为所必需的。