我有以下由 gcc 编译的代码:
#include <iostream>
using namespace std;
class Buffer {
public:
operator char *() { cout << "operator const * called" << endl; return buff; }
private:
char buff[1024];
};
int main(int, char**) {
Buffer b;
(char *)b; // Buffer::operator char * is called here
return 0;
}
我看到的是在线调用了 Buffer::operator char *:
(char *)b;
为什么这里调用了 C 风格的转换调用 Buffer::operator char *?
我觉得
static_cast<char *>(b);
应该用于显式调用 Buffer::operator char *。
最佳答案
如果您执行了(char *)(&b)
,它将是 C 风格的转换,并且 operator char*
将不会被调用。在这里,您试图将一个对象转换为 char*。由于没有自动转换编译器会查找您提供的 operator char* 。如果你没有提供它,你会得到一个编译器错误,提示 Buffer
can not be converted into char*
关于C++ 对象和 C 风格转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1635897/