【发布时间】:2016-11-07 22:30:27
【问题描述】:
有结构
struct Person{
Person( int i , int g):id(i),age(g){};
int id;
int age;
};
我可以通过将指向成员数据的指针作为参数传递给函数来动态返回成员数据。例如
int extract( Person * p , int Person::* param)
{
return p ->*param;
}
并使用
调用Person *p = new Person (10 , 20 );
cout << extract(p , &Person::id )<< endl;
但我的问题是,为什么这行得通?我们传递 &Person::id 基本上是 memory ,但 Person 是一个违反定义的 r 值。
感谢所有对我可能对主题的误解的解释/澄清。 谢谢。
【问题讨论】:
-
Person是类型名称,而不是右值 -
&Person::id在内部表示为任何Person对象的偏移量。 -
“我们正在传递
&Person::id基本上是内存” - 你到底是什么意思?什么是“基本记忆”? -
代码中的任何地方都没有 Person 类型的右值。也没有指向成员函数的指针,所以请更改误导性标题。
标签: c++ c++11 rvalue pointer-to-member