& 运算符重载以后 一个有趣的程序

 class TTT
 {
 public:
  int operator&() const {
   return 13;
  }
 
 };
void main()
{
 TTT t;
 std::cout<<boost::addressof(t)<<std::endl;
 std::cout<<(TTT*)(&(char &)(t))<<std::endl;
 std::cout<< (&t)<<std::endl;
 
}

/*Output

0012FF7C
0012FF7C
13
*/

重载以后对TTT类对象的取地址都输出常数13

解决办法是boost::addressof,实际展开是

addressof(T& v)
{
  return reinterpret_cast<T*>(
       &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
}

简化成main函数中第三行 

你可能感兴趣的:(c,Class,output)