【发布时间】:2020-02-24 20:45:21
【问题描述】:
在以下代码中:
#include <iostream>
class Foo{
public:
int *a, *b;
}
Foo::Foo(int x, int y) : a( new int ( x ) ) , b( new int ( y ) )
{
}
Foo test(1,2);
如果我想计算指针变量a中存储的取消引用值,为什么要写:
std::cout << *test.a << std::endl; //method 1
而不是:
std::cout << test.(*a) << std::endl; //method 2
在我看来,我们正在访问a 的取消引用值,即*a,这是Foo 类的test 对象的成员变量,因此方法2 在语法上感觉更正确。方法 1(我认为正确的方法)似乎取消了对整个 test 对象的引用。
【问题讨论】:
-
因为语言是这样的?
-
我认为这句话是不正确的:“方法 1 似乎取消了对整个测试对象的引用”。我相信它只会取消引用
a成员。test.a产生一个int指针,而取消引用运算符*的先例很少,所以*test.a就像写*(test.a)。展开它可能会更清楚一点:int *aa = test.a。这自然会导致*aa打印整数。 -
将指针指向像
int这样微不足道的东西的动机是什么?指针大于int本身。