指向成员的指针:指针值代表什么?

9 c++ pointers

我正在使用指向成员的指针,并决定实际打印指针的值.结果不是我的预期.

#include <iostream>

struct ManyIntegers {

    int a,b,c,d;
};

int main () {

    int ManyIntegers::* p;

    p = &ManyIntegers::a;
    std::cout << "p = &ManyIntegers::a = " << p << std::endl; // prints 1

    p = &ManyIntegers::b;
    std::cout << "p = &ManyIntegers::b = " << p << std::endl; // prints 1

    p = &ManyIntegers::c;
    std::cout << "p = &ManyIntegers::c = " << p << std::endl; // prints 1

    p = &ManyIntegers::d;
    std::cout << "p = &ManyIntegers::d = " << p << std::endl; // prints 1

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么值p始终为1?不应该p以某种方式反映它指向哪个类成员的价值?

Rob*_*obᵩ 9

正如大家所说,ostream没有适当的operator<<定义.

试试这个:

#include <cstddef>
#include <iostream>

struct Dumper {
  unsigned char *p;
  std::size_t size;
  template<class T>
  Dumper(const T& t) : p((unsigned char*)&t), size(sizeof t) { }
  friend std::ostream& operator<<(std::ostream& os, const Dumper& d) {
    for(std::size_t i = 0; i < d.size; i++) {
      os << "0x" << std::hex << (unsigned int)d.p[i] << " ";
    }
    return os;
  }
};

#include <iostream>

struct ManyIntegers {

    int a,b,c,d;
};

int main () {

    int ManyIntegers::* p;

    p = &ManyIntegers::a;
    std::cout << "p = &ManyIntegers::a = " << Dumper(p) << "\n"; 

    p = &ManyIntegers::b;
    std::cout << "p = &ManyIntegers::b = " << Dumper(p) << "\n"; 

    p = &ManyIntegers::c;
    std::cout << "p = &ManyIntegers::c = " << Dumper(p) << "\n"; 

    p = &ManyIntegers::d;
    std::cout << "p = &ManyIntegers::d = " << Dumper(p) << "\n"; 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)


Ros*_*ost 7

标准ostream operator<<没有指向成员的指针的重载,因此指针已被隐式转换为bool.

  • 为什么这到底有没有4个赞成票呢?提供的解决方案**不起作用!**. (3认同)
  • `reinterpret_cast <unsigned>(p)`[触发编译错误](http://ideone.com/C0O8u). (2认同)