在printf中使用`operator const char *`

陈OT
struct MyClass
{
    operator const char* ()
    {
        return "hello";
    }
};

int main()
{
    MyClass obj;  
    std::cout << obj;    // ok
    printf("%s\n", obj); // Crash
}

为什么有对象operator const char*不能被自动转换为const char* stringprintf映射的%s

仅仅是因为在类似于printf的函数中没有类型识别,而%s只期望终端为0的char数组?

布林迪

为什么?由于C ++中可变参数的限制:它们基本上没有类型,您可以将它们视为void *(但不是)。

因此,知道了这一点,编译器不知道您认为该字符串应该是字符串。它很可能需要是整数,双精度数或另一个对象。或者只是编译器选择的本身。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在printf中使用`operator const char *`

来自分类Dev

在模板特化中使用const char **

来自分类Dev

(const char *)++或(const char)++?

来自分类Dev

如何在自定义printf中使用参数const char * format

来自分类Dev

为 const char* 重载 operator+

来自分类Dev

const char * vs const char []

来自分类Dev

const char **和char **

来自分类Dev

在C中使用const char *返回字符串

来自分类Dev

FLTK-在if语句中使用输入值(const char *)

来自分类Dev

在C ++中使用const char *作为映射键的正确方法

来自分类Dev

在 ostream 中使用运算符 const char*

来自分类Dev

const int和const char *(为什么使用指针?)

来自分类Dev

为什么strtok使用char *而不是const char *?

来自分类Dev

从自定义printf函数返回const char *

来自分类Dev

constexpr const char *与constexpr const char []

来自分类Dev

Funktionsargument const char * vs. const char **

来自分类Dev

在C ++中使用strcmp比较两个char变量,显示从'char'到'const char *'的无效转换

来自分类Dev

const constexpr char *与constexpr char *

来自分类Dev

错误:类型为'const char [35]'和'const char [2]'的无效操作数为二进制'operator +'

来自分类Dev

二进制'operator +'类型为'const char *'和'const char [2]'的无效操作数

来自分类Dev

二进制'operator +'类型为'const char [8]'和'const char *'的无效操作数

来自分类Dev

错误:类型为“const char [8]”和“const char [7]”的无效操作数到二进制“operator<<”

来自分类Dev

比较const char *与strcmp

来自分类Dev

const char *的多个定义

来自分类Dev

const(char)*无法修改

来自分类Dev

const char *返回类型

来自分类Dev

const char *损坏

来自分类Dev

比较const char *与strcmp

来自分类Dev

C ++数组const char

Related 相关文章

热门标签

归档