C++ 对象和 C 风格转换问题

标签 c++ casting

我有以下由 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/

相关文章:

c++ - 尝试在 OS X 10.6 上安装 libxml++

c++ - 将 std::distance 的结果与无符号类型进行比较

c++ - 发布配置构建,调试不

c++ - 我是否应该确保在退出程序之前销毁 SDL 2.0 对象(渲染器、窗口、纹理等)?

c++ - 如何在 for_each 中组合函数和谓词?

swift - 可以快速转换 T 以符合协议(protocol)

java - Android Java 类转换

c++ - 将 QLineEdit 变量的值分配给 QStringList 变量

c++ - 模板类实例之间的类型转换

强制转换为 C99 中的指针数组