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ます。そして、そのブール値はtrue、ゼロ以外の値として評価されています。

于 2013-03-02T16:49:46.287 に答える