Управляемые объекты, почему не (^). компилировать? - PullRequest
2 голосов
/ 29 июня 2011

Недавно у меня возникла необходимость изучить управление последовательным портом, поэтому я обратился к .net для этого.Я подумал, так как я использую Visual Studio, это было бы легко ... я был неправ ...

После выяснения, что такое "^" и "gcnew", я наткнулся на"->", который я все еще обнаружил, чтобы означать "(*)." (не зная, что это из-за моего собственного невежества).

Вопрос в следующем:

Если "-> "эквивалентно" (*). "И" ^ "эквивалентно" * "

Тогда почему" (^). "не скомпилируется при вводе, вызывает автозавершенным?Или я что-то здесь упускаю?

Ответы [ 3 ]

5 голосов
/ 29 июня 2011

Шляпа (^) и проценты (%) в C ++ / CLI имеют аналог (1) со звездочкой (*) и амперсандом (&) в C ++ в типах .

^ не используется как оператор; вы все еще используете *.


(1) Обратите внимание, что они не совпадают или эквивалент . ^ и % используются для дескрипторов и ссылок на объекты в куче мусора (т.е. управляемые объекты). * и & используются для указателей и ссылок на нативные объекты C ++ (по крайней мере, по большей части).

Вы будете очень осторожны при программировании на C ++ / CLI: никогда не забывайте, что в одном исходном файле используются две совершенно разные объектные модели. Способ создания и уничтожения объектов и способ управления временем жизни объектов в C ++ полностью отличаются от того, как все работает в .NET.

0 голосов
/ 29 июня 2011

, если ваша единственная причина использования .net - использовать последовательный порт, не делайте этого. Нативный API более мощный и простой в использовании.

0 голосов
/ 29 июня 2011

Звездочка * является более общей, чем шляпа ^. В качестве модификатора типа T* означает C ++ - указатель, а T^ означает CLI-ссылку. Однако другое использование символа для оператора разыменования применяется к обоим типам, и оператор косвенного вызова -> делает аналогичным образом:

T * x = new T;
T ^ y = gcnew T;

*x = 5;
*y = 6;

x->foo();
y->foo();

Идея состоит в том, что разыменование является общей концепцией, которая не зависит от конкретного типа ссылки, поэтому один и тот же символ может использоваться для минимизации распространения синтаксиса.

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