这很奇怪(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属于哪个对象?我以为我需要一个对象来访问数据成员
答案 0 :(得分:1)
此代码编译并实际播出“1”。它在哪里得到它?
在:
中会发生什么int (MyClass::*var) = &MyClass::membervar;
cout << var;
因为没有移位运算符接受流和成员指针,所以选择另一个移位运算符:
std::ostream::operator<<(bool);
换句话说,在将其转换为var
后,它会打印bool
。
答案 1 :(得分:0)
此代码编译并实际播出“1”。它在哪里得到它??
您要打印的是指向成员函数的指针。
它正在转换为bool
。那个bool正在评估为true
,这意味着它不是零。