Почему указатели ссылок определены в C ++ / CLI вместо «перегрузки указателя»? - PullRequest
1 голос
/ 22 февраля 2011

В данный момент я работаю через C ++ / CLI, и мне любопытно, почему вместо «перегруженных указателей» есть дескрипторы ссылок. Под «перегруженными указателями» я подразумеваю использование обозначения * указателя, которое, как подразумевает компилятор Visual C ++ 2010, отличается от указателей C ++.

Например, в стандартном основном заголовке:

int main(array<System::String ^>^ args)

Я знаю причину ^ запаздывания правой угловой скобки, как указано в MSDN.

Мне известно, что String является типом объектов .NET и, таким образом, является ссылкой, но я привык к Objective-C, где ссылки на объекты принимают стандартную запись указателя:

NSString * string = ... etc.

Спасибо

Scott

Ответы [ 2 ]

4 голосов
/ 22 февраля 2011

Потому что технически ссылки и указатели разные. Ссылки являются непрозрачными указателями, управляемыми средой выполнения; указатели не поддаются проверке и управляются программистом. Возможно, было бы возможно использовать один и тот же синтаксис для обоих, но это могло бы привести к путанице и потенциальным ошибкам.

0 голосов
/ 01 июля 2011

@ Бен Фойгт: При каких обстоятельствах система может разрешать сеттеры по типу? Лично я не вижу причин, по которым это не должно быть в состоянии (ИМХО, должно быть допустимо иметь свойство "foo" с геттером типа Complex, сеттером типа "Double" и другим сеттером типа "Complex"). ; конечно, можно иметь несколько переопределений метода сеттера, но я не знаю такой возможности для свойств).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...