我对C ++中的引用感到困惑。谁能解释一下这个:
class Dog
{
public:
Dog( void ) {
age = 3;
name = "dummy";
}
void setAge( const int & a ) {
age = a;
}
string & getName( void ) {
return name;
}
void print( void ) {
cout << name << endl;
}
private:
int age;
string name;
};
int main( void ) {
Dog d;
string & name = d.getName(); // this works and I return reference, so the address of name will be the same as address of name in Dog class.
int a = 5;
int & b = a; // why this works? by the logic from before this should not work but the code below should.
int & c = &a // why this does not work but the code above works?
}
此外,当我删除&
并将此功能设为string getName
时,代码将无效。
答案 0 :(得分:2)
以防
int & b = a;
b
是a
的引用,int
和a
两个名称都可以为b
类型的数据分配内存。
以防
int & c = &a;
您正在尝试将为a
分配的内存地址 - 一元&
的结果 - 保存到int & c
...这会导致错误。
方法
string & getName( void )
返回对string
的引用,因此string & name
(main
中的变量)将提供对私有类成员string name;
的内存的访问权限