Say, если у меня есть бинарное дерево узлы определяются следующим образом: (и просто предположить, что все члены являются общедоступными для удобства ...)Неоднозначного вызов ссылочного класса члена
class node
{
public:
int v;
node* left;
node* right;
//member functions....
}
И я два узел указателей назвали и B и запустить следующий сценарий:
node* A;
node* B;
A->left = B;
A->left = NULL;
делают ли точка B на NULL или изменяет только левый указатель ребенка (т.е. this-> слева в * A) и B по-прежнему остается то, что он используется, чтобы указать ?
Если первый случай верен, как я могу изменить значение A-> left, не затрагивая B?
TIA!
UB не требуется сбой:/, – Jarod42
@ Jarod42, с вероятностью 99,84% (значение измеряется и точным :)) в этом конкретном случае, поэтому я решил не вникать в него. «Это UB» звучит так: «он, вероятно, сработает, но по какой-то причине он, вероятно, сломается». И в этом случае (мы разыскиваем значение мусора как указатель и пытаемся что-то там написать), он будет крутиться (почти) повсюду. Если OP не очень удачлив или его компилятор очень остроумный. Тем не менее, если вы хотите, я сейчас отредактирую ответ, чтобы сделать его более конкретным. – FreeNickname
Спасибо. Да, я забыл набрать код инициализации A и B (извините, что я больше фокусируюсь на самом вопросе, а не на коде. Чтобы убедиться, что доступ к A-> left по существу обращается к адресу (& A + sizeof (int)), верно? (т.е. this-> left вместо B)) –