我最近需要考虑控制一个串口,所以我转向.net。我想,既然我正在使用视觉工作室,这很容易......我错了......
在搞清楚“^
”和“gcnew
”之后,我偶然发现了“->
”,我仍然发现“(*).
” (不知道这是由于我自己的无知)。
问题是:
如果“->
”相当于“(*).
”
“^
”相当于“*
”
那么为什么“(^).
”在输入时不会编译,会显示自动完成?或者我在这里遗漏了什么?
答案 0 :(得分:5)
C ++ / CLI中的帽子(^
)和百分比(%
)是星号(*
)和&符号的偶然(1)( {C} in 。
&
)
^
不用作运营商;你仍然使用*
。
(1)请注意,它们不是相同的或等效的。 ^
和%
用于处理和引用垃圾收集堆上的对象(即托管对象)。 *
和&
用于指向本机C ++对象的引用和引用(至少在大多数情况下)。
在C ++ / CLI中编程时要非常小心:永远不要忘记在单个源文件中使用了两个完全不同的对象模型。创建和销毁对象的方式以及如何在C ++中管理对象生存期与.NET中的工作方式完全不同。
答案 1 :(得分:0)
星号*
比帽子^
更通用。作为类型修饰符,T*
表示C ++ - 指针,T^
表示CLI引用。但是,取消引用运算符的符号的其他用法适用于这两种类型,而间接调用运算符->
同样适用:
T * x = new T;
T ^ y = gcnew T;
*x = 5;
*y = 6;
x->foo();
y->foo();
这个想法是解除引用是一个独立于特定引用类型的一般概念,因此可以使用相同的符号来最小化语法扩散。
答案 2 :(得分:0)
如果您使用.net的唯一原因是使用串口,请不要。原生api更强大,更易于使用。