3

这很奇怪(MSVC2012):

using namespace std;

class MyClass
{
public:

    int membervar;
};

template< int (MyClass::*var) > struct A 
{
   void print()
   {
       cout << var;
   }
};

int main(int argc, char *argv[])
{
   struct A <&MyClass::membervar> object;

   object.print();
}

此代码编译并实际输出“1”。它从哪里得到它??membervar 属于什么对象?我以为我需要一个对象来访问数据成员

4

2 回答 2

1

此代码编译并实际输出“1”。它从哪里得到它?

发生的情况是:

int (MyClass::*var) = &MyClass::membervar;
cout << var;

因为没有采用流和成员指针的移位运算符,所以选择了另一个移位运算符:

std::ostream::operator<<(bool);

换句话说,它var在将其转换为bool.

于 2013-03-02T16:47:36.470 回答
0

此代码编译并实际输出“1”。它从哪里得到它??

您要打印的是指向成员函数的指针。

它正在转换为bool. 并且该 bool 评估为true,这意味着它非零。

于 2013-03-02T16:49:46.287 回答