今天翻看自己写的一篇博客,有关一条常见的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()
{
s