-> оператор в if (c ++) - PullRequest
       3

-> оператор в if (c ++)

0 голосов
/ 21 октября 2018

Я новичок в C ++, недавно я увидел следующий код:

 if (A1 -> B1) A1->B1->C1(numbers);

Мне трудно понять эту простую строку.Не могли бы вы посоветовать мне?Я думаю, там написано, что если указатель A1 назначен на B1 (true), то точка A1 на B1 и B на функцию C1, я прав?Спасибо за вашу помощь

1 Ответ

0 голосов
/ 21 октября 2018

где-то в вашем коде есть класс или структура.в отличие от . оператор -> используется для доступа к члену структуры или класса, на который указывает указатель.давайте предположим, что наши классы выглядят примерно так:

class Foo
{
public:
  void C1(int numbers);
};

class Bar
{
public:
  Foo* B1;    //pointer to B1 object.
};

давайте также предположим, что где-то в коде у нас был объявлен указатель, и мы пытаемся получить доступ к члену объекта, на который указывает указатель.

Foo* myFoo; //pointer myFoo is declared. 
myFoo->C1; //trying to access C1 function what  myFoo is pointing at.

в приведенном выше примере мы пытаемся получить доступ к члену myFoo с помощью ->.Проблема в том, что myFoo ни на что не указывает ... мы только объявили указатель, но не присвоили адрес какого-либо конкретного Foo объекта.Следовательно, использование оператора -> для доступа к элементам указателя приведет к неопределенному поведению.Таким образом, для борьбы с этой возможной проблемой, которая может возникнуть в коде, мы можем защитить myFoo проверкой nullptr, прежде чем получить доступ к его члену

Foo* myFoo = nullptr;

, теперь мы можем проверить, является ли myFoo допустимым или нет.

if(myFoo)
   myFoo->C1(1); //if its valid call the C1 function.

приведенный выше код получает доступ к члену myFoo, только если myFoo допустим.

Возвращаясь к вашему примеру, теперь мы можем предположить, что происходит.

       if(A1->B1) //check if the B1 pointer of the A1 is valid.
          A1->B1->C1(3); //if it is valid, call the C1 function of the object B1 pointing to.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...