Я не понимаю эту строку кода.
return (*(Vector *)this)[i];
Предполагая, что T
- это тип, T*
- это тип "указатель на T
".Таким образом, учитывая, что Vector
является типом, Vector*
является указателем на Vector
.
this
является специальным именем, которое является указателем на аргумент объекта функции-члена.
(T)expr
- явное преобразование типов.Он выполняет одно или сочетание статического приведения, переинтерпретации приведения или константного приведения к выражению, преобразовывая значение в тип T
.В выражении (Vector *)this
указатель this
преобразуется в тип Vector*
.Учитывая, что Vector
является базовым классом, это статическое приведение, а точнее, приведение вверх, потому что мы приводим в иерархию наследования.
Унарный оператор *
в *expr
равеноператор косвенного обращения.Он опосредуется через операнд-указатель (в данном случае) и приводит к l-значению указанного объекта.Таким образом, *(Vector *)this
будет lvalue типа Vector
, который является субобъектом базового класса this
.
expr[index]
является оператором индекса.Таким образом, (*(Vector *)this)[i]
вызывает оператор индекса базового класса для объекта this
.
Наконец, оператор return expr;
выпрыгивает из функции и возвращает значение выражения вызывающей стороне.Таким образом, return (*(Vector *)this)[i];
возвращает результат нижестоящего оператора базового класса.