为什么这个断言失败了?
Why is this assert failing?
main.cpp
中的 assert
失败了,我不明白为什么。
这里是string.hpp
class String
{
private:
int len;
char* str;
public:
String(char const* s); // C-string constructor
~String() {delete str;}; // destructor
char* const getString(); //get string for printing
};
inline bool operator==(String lhs, String rhs)
{
return std::strcmp(lhs.getString(),rhs.getString());
}
// Define operator!= in terms of ==
inline bool operator!=(String const& lhs, String const& rhs)
{
return !(lhs == rhs);
}
这里是string.cpp
String::String(char const* s) // C-string constructor
{
len = std::strlen(s);
str = new char[len+1];
std::strcpy(str,s);
}
char* const String::getString()
{
return str;
}
这里是main.cpp
#include <cassert>
int main()
{
String c = "c";
String d = "d";
assert(c == c);
assert(c != d);
}
我试图只包含必要的代码。我遗漏了很多明显的包括。 assert(c == d)
失败了,我不明白为什么。 == 的运算符重载应该返回 true 结果。
strcmp
returns 0 当其参数具有相同的内容时。
因此,将与 0 的比较添加到您的 operator==
:
inline bool operator==(String const& lhs, String const& rhs)
{
return std::strcmp(lhs.getString(), rhs.getString()) == 0;
}
此外,由于您可能不想在每次调用 operator==
时都复制参数,我建议通过引用传递它们。
std::strcmp
returns 0
如果字符串相等。因此,您的 operator==
将 return false
用于相等的字符串,而 true
否则。
例如,您可以切换 ==
和 !=
的实现,
main.cpp
中的 assert
失败了,我不明白为什么。
这里是string.hpp
class String
{
private:
int len;
char* str;
public:
String(char const* s); // C-string constructor
~String() {delete str;}; // destructor
char* const getString(); //get string for printing
};
inline bool operator==(String lhs, String rhs)
{
return std::strcmp(lhs.getString(),rhs.getString());
}
// Define operator!= in terms of ==
inline bool operator!=(String const& lhs, String const& rhs)
{
return !(lhs == rhs);
}
这里是string.cpp
String::String(char const* s) // C-string constructor
{
len = std::strlen(s);
str = new char[len+1];
std::strcpy(str,s);
}
char* const String::getString()
{
return str;
}
这里是main.cpp
#include <cassert>
int main()
{
String c = "c";
String d = "d";
assert(c == c);
assert(c != d);
}
我试图只包含必要的代码。我遗漏了很多明显的包括。 assert(c == d)
失败了,我不明白为什么。 == 的运算符重载应该返回 true 结果。
strcmp
returns 0 当其参数具有相同的内容时。
因此,将与 0 的比较添加到您的 operator==
:
inline bool operator==(String const& lhs, String const& rhs)
{
return std::strcmp(lhs.getString(), rhs.getString()) == 0;
}
此外,由于您可能不想在每次调用 operator==
时都复制参数,我建议通过引用传递它们。
std::strcmp
returns 0
如果字符串相等。因此,您的 operator==
将 return false
用于相等的字符串,而 true
否则。
例如,您可以切换 ==
和 !=
的实现,