【问题标题】:Syntax for Accessing Dereferenced Values of an Object访问对象的取消引用值的语法
【发布时间】: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 本身。

标签: c++ pointers


【解决方案1】:

您需要*test.a 而不是test.(*a) 的原因是a 本身不存在(从范围的变量来看)。它是Foo 的成员,因此要访问Foo::a,您需要test.a。然后将* 应用于test.a,因为test.a 是一个指针。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
相关资源
最近更新 更多