2013-08-10 10 views
7

Я конвертирую программу на C++ в C#, но эта часть меня смущает. Что означает возврат * это означает?Что означает «return * this» в C++?

template< EDemoCommands msgType, typename PB_OBJECT_TYPE > 
class CDemoMessagePB : public IDemoMessage, public PB_OBJECT_TYPE 
{ 
    (...) 
    virtual ::google::protobuf::Message& GetProtoMsg() { return *this; } 
} 

Как это перевести на C#?

+0

Тег должен быть C++. –

ответ

13

this означает указатель на объект, так *this является объектом. Таким образом, вы возвращаете объект, то есть *this возвращает ссылку на объект.

2

Вы просто возвращаете ссылку на объект. this - это указатель, и вы разыскиваете его.

Он переводится на C# return this; в случае, если вы не имеете дело с примитивным.

2

В вашем конкретном случае вы возвращаете ссылку на 'this', так как возвращаемый тип функции является ссылкой (&).

Говоря о размере возвращаемой памяти, это то же самое, как

virtual ::google::protobuf::Message* GetProtoMsg() { return this; } 

Но использование во время вызова отличается.

Во время вызова вы назовете сохранить возвращаемое значение функции что-то вроде:

Message& m = GetProtoMsg(); 
+1

Это не то же самое, что возврат указателя. Это похоже. – juanchopanza

+0

Правильно. Отредактировано ^^ – Lake

1

Используя указатель, мы можем напрямую получить доступ к значению, хранящемуся в переменной, на которую оно указывает. Для этого нам просто нужно предшествовать идентификатору указателя со звездочкой (*), которая действует как оператор dereference и которая может быть буквально переведена на «значение, указанное».

1

Как в C# this является неявным указателем на объект, который вы используете в данный момент.
В вашем конкретном случае, когда вы возвращаете ссылку & на объект, вы должны использовать *this, если хотите вернуть объект, над которым вы сейчас работаете.
Не забудьте, что ссылка принимает переменную самостоятельно или в случае указателя (this) объект, на который указывает (*this), но не указатель (this).

8

Смотрите, что если вы пытаетесь использовать return *this; на функцию, чей возвращаемый тип Type и не Type&, C++ будет пытаться сделать копию объекта, а затем немедленно вызвать деструктор, как правило, не предназначенное поведение. Таким образом, возвращаемый тип должен быть ссылкой, как в вашем примере.

Смежные вопросы