GCC对char指针的处理和其他C++编译器处理不一样
以下是代码
头文件:char_test.h
#ifndef CHAR_TESTH
#define CHAR_TESTH
#include <string.h>
#include <stdio.h>
class Test
{
public:
Test(char *p);
~Test();
operator char*() const;
private:
char *m_pBuf;
int m_nBufLen;
};
inline bool operator==(const Test& s1, const Test& s2)
{
return (strcmp(s1 , s2)==0);
}
inline bool operator==(const Test& s1, char * s2)
{
return (strcmp(s1 , s2) == 0) ;
}
#endif
CPP文件:char_test.cpp
#include "char_test.h"
Test::Test(char *p)
{
long nLen = strlen(p);
if (nLen == 0)
{
return;
}
m_pBuf = new char[nLen + 1];
strcpy(m_pBuf , p);
m_nBufLen = nLen + 1;
}
Test::~Test()
{
if (m_pBuf)
{
delete []m_pBuf;
}
}
Test::operator char*() const
{
return m_pBuf;
}
main文件:
#include <cstdlib>
#include <iostream>
#include "char_test.h"
using namespace std;
int main(int argc, char *argv[])
{
Test Test1("test");
if (Test1 == "test")
{
printf("==\r\n");
}else
{
printf("!=\r\n");
}
system("PAUSE");
return EXIT_SUCCESS;
}
这段程序在BCB6.0、VC6.0、AIX的xlC均编译通过,但是用GCC编译提示:
ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
bool operator==(const Test&, char*)
operator==(const char*, const char*) <built-in>
提示"=="操作符存在二义性,不知道是不是GCC对于这类对二义性审查要求更严格?
头文件:char_test.h
#ifndef CHAR_TESTH
#define CHAR_TESTH
#include <string.h>
#include <stdio.h>
class Test
{
public:
Test(char *p);
~Test();
operator char*() const;
private:
char *m_pBuf;
int m_nBufLen;
};
inline bool operator==(const Test& s1, const Test& s2)
{
return (strcmp(s1 , s2)==0);
}
inline bool operator==(const Test& s1, char * s2)
{
return (strcmp(s1 , s2) == 0) ;
}
#endif
CPP文件:char_test.cpp
#include "char_test.h"
Test::Test(char *p)
{
long nLen = strlen(p);
if (nLen == 0)
{
return;
}
m_pBuf = new char[nLen + 1];
strcpy(m_pBuf , p);
m_nBufLen = nLen + 1;
}
Test::~Test()
{
if (m_pBuf)
{
delete []m_pBuf;
}
}
Test::operator char*() const
{
return m_pBuf;
}
main文件:
#include <cstdlib>
#include <iostream>
#include "char_test.h"
using namespace std;
int main(int argc, char *argv[])
{
Test Test1("test");
if (Test1 == "test")
{
printf("==\r\n");
}else
{
printf("!=\r\n");
}
system("PAUSE");
return EXIT_SUCCESS;
}
这段程序在BCB6.0、VC6.0、AIX的xlC均编译通过,但是用GCC编译提示:
ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
bool operator==(const Test&, char*)
operator==(const char*, const char*) <built-in>
提示"=="操作符存在二义性,不知道是不是GCC对于这类对二义性审查要求更严格?
...全文
相关推荐
你必须知道的495个C语言问题
**大多数编译器提供了控制结构体成员对齐方式的方法,例如通过编译器特定的属性或宏。例如,在GCC中可以使用`__attribute__((packed))`来关闭填充。
你必须知道的495个C语言问题.pdf
检查代码中的指针使用是否正确。**2.15 可以初始化一个联合吗?**联合可以像结构体一样初始化,但由于联合共享同一段内存,初始化时需要小心。
GCC编译器参数详解
GCC 编译器参数详解 GCC 编译器是 GNU 项目中的一部分,是一个功能强大且广泛使用的编译器。
GCC编译器内建宏定义
它支持多种编程语言,包括C、C++等,并且拥有丰富的内建宏定义来帮助开发者更好地了解编译环境和编译器特性。
Linux系统上C/C++编译器gcc/egcs详解
### Linux系统上C/C++编译器gcc/egcs详解在Linux环境下,GCC(GNU Compiler Collection)作为一套重要的开源编译器集合,为开发者提供了强大的C和C++语言支持


