今天翻看自己写的一篇博客,有关一条常见的const_cast转换的“BUG”解释 ,那篇博客最后留了一个疑问,为什么cout << &a 之后,输出的是1?(a为volatile const int类型)
当时猜想编译器把&a当做bool类型输出了,具体原因不清楚,当时也没在意。
今天翻看string类型的size函数和length函数的区别(详情参见string类的size与length的区别),原博主中记载,定义string类型的变量s,若使用cout输出s.size或s.length,则会调用ostream& operator < <(ostream&, bool)重载操作符,导致将该函数地址按bool类型变量输出。但该博主也未解释情况。
但同时还有人表示,cout<<s.at 则会报错。这究竟是为什么呢?
将上述论述写一个小程序验证(VC6.0中运行):
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "asd";
cout << s << endl;
cout << "s.length(): " << s.length() << endl; // 输出为3
cout << "s.size

本文探讨了C++中指针作为cout输出参数时,为何某些情况下会被自动转换为bool类型输出,特别是针对成员函数指针的情况。通过实例代码展示了编译器在面对重载函数地址时的困惑,指出只有明确类型时,编译器才能正确输出。同时,文章提出了对于指针术语使用的精确性建议。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



