Как то не логично работает вызов под номером 1, теряется уровень косвенности, ведь возвращается указатель, почему к нему сразу можно применить вызов функции, с номером 2 все понятно.
#include <iostream>
template <typename T>
class SmartPointer
{
T *m_obj;
public:
SmartPointer(T *obj) : m_obj(obj) { }
~SmartPointer() { delete m_obj; }
T* operator->() { return m_obj; }
T& operator* () { return *m_obj; }
};
class Show
{
public:
void Do() { std::cout << "Show"; }
};
int main(int argc, char* argv[] )
{
SmartPointer<Show> sP{new Show{} };
sP->Do(); // 1
sP.operator->()->Do(); // 2
return 0;
}
Как я понимаю, действует п. 13.3.1.2.8
При выборе функции-операции operator-> второй операнд операции -> игнорируется и не считается аргументом вызова функции-операции operator->. Когда операция -> завершается, к возвращаемому значению применяется операция -> с исходным вторым операндом в качестве аргумента
и примечание к нему
Если значение, возвращаемое функцией-операцией operator->, имеет классовый тип, то в результате может быть выбрана и вызвана другая функция-операция operator->. Этот процесс повторяется, пока очередная функция-операция operator-> не возвратит значение неклассового типа.
Просто согласно правилам языка за ->
не может следовать ->
:)
Делаю список логических дисков, назначаю ему рендерВ этом коде рендер стандартный с небольшими настройками цвета фона и иконка дефолтной...
В целом теоретический вопросИмеется: Приложение передающее данные с plain text в новую активность(intent) Нужно реализовать:решение квадратного...
Может кто работает/ работал с данным фреймворком, подскажите хороший гайд, я уже и офф сайты посмотрел и всякие туториалы, но не особо понимаю...