这可能吗?当我把char作为类型时,我得到奇怪的错误消息:
inline bool operator==(const char *str1, const char *str2){
// ...
}
错误讯息:error C2803: 'operator ==' must have at least one formal parameter of class type
...我根本不明白。
我在想是否可以直接比较像:
const char *str1 = "something";
const char *str2 = "something else";
const char str3[] = "lol"; // not sure if this is same as above
然后比较:
if(str1 == str2){
// ...
}
等
但我也希望它能与之合作:
char *str = new char[100];
和
char *str = (char *)malloc(100);
我假设我使用这种方式的每个char数组都以NULL字符结尾,所以检查应该是可能的,但我知道它可能是不安全的等等。我只是想知道这是否可行,以及如何。
答案 0 :(得分:7)
这是不可能的。正如您的编译器指出的那样,您不能为原始数据类型重载此运算符。比较的至少一侧必须是非原始的,以便可以进行过载。
从同样的意义上讲,您无法从原始数据类型派生新类(为其添加功能)。
答案 1 :(得分:4)
您正在尝试比较两个指针。
const char* str1 = "string1";
const char* str2 = "string1";
if(str1 == str2) // never true, str1 is not the same pointer as str2
{
};
但是,您已经提供了C ++标记,因此您应该使用std::string
:
#include <string>
std::string str1 = "string1";
std::string str2 = "string1";
if(str1 == str2) // yes! std::string overloads operator ==
{
}
答案 2 :(得分:3)
指针是内置类型。已经有内置的比较运算符,你不能覆盖它们。只需使用std::string
。
答案 3 :(得分:0)
决定我的评论会更好作为答案,你应该使用标准的string函数(strncmp,strncat等)。
编辑: 正如另一个答案中指出的那样,你不能做过载。但是对于char数组和char指针,你应该使用标准的库函数。
答案 4 :(得分:0)
你当然可以完全编写自己的比较函数,事实上它是最基本的事情之一。我不知道为什么有人会说你做不到。你不能称之为operator =
。这是(未经测试):
int my_strcmp(char const* s1, char const* s2)
{
for(;*s1 == *s2 && *s1; ++s1,++s2);
return *s1 - *s2;
}
...
if (!my_strcmp(str1, str2)) // they're ==.
答案 5 :(得分:0)
使用strcmp()
来比较字符:它适用于字符指针char *
和字符串数组char [ ]
。
#include <string.h>
#include <stdio.h>
char *string_Char_pointer1 = {"2012-12-06 14:28:51"};
char *string_Char_pointer2 = {"1911-12-06 14:28:51"};
char string_Char_Array1[] = "2012-12-06 14:28:51";
char string_Char_Array2[] = "1911-12-06 14:28:51";
int main( void )
{
char tmp[20];
int result;
printf( "Comparing string_Char_pointer..\n\n\n");
printf( "Compared strings:\n %s\n %s\n\n\n", string_Char_pointer1, string_Char_pointer2 );
result = strcmp( string_Char_pointer1, string_Char_pointer2 );
if( result > 0 ) strcpy( tmp, "greater than" );
else if( result < 0 ) strcpy( tmp, "less than" );
else strcpy( tmp, "equal to" );
printf( " strcmp: String 1 is %s string 2\n\n", tmp );
printf( "\n\nComparing string_Char_Array..\n\n");
printf( "Compared strings:\n %s\n %s\n\n\n", string_Char_Array1, string_Char_Array2 );
result = strcmp( string_Char_pointer1, string_Char_pointer2 );
if( result > 0 ) strcpy( tmp, "greater than" );
else if( result < 0 ) strcpy( tmp, "less than" );
else strcpy( tmp, "equal to" );
return 0;
}