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* string
在printf
映射的%s
?
仅仅是因为在类似于printf的函数中没有类型识别,而%s
只期望终端为0的char数组?
为什么?由于C ++中可变参数的限制:它们基本上没有类型,您可以将它们视为void *
(但不是)。
因此,知道了这一点,编译器不知道您认为该字符串应该是字符串。它很可能需要是整数,双精度数或另一个对象。或者只是编译器选择的本身。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句