Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C和x2B之间的差异+;引用类型参数传递和C#';裁判?_C#_C++ - Fatal编程技术网

C和x2B之间的差异+;引用类型参数传递和C#';裁判?

C和x2B之间的差异+;引用类型参数传递和C#';裁判?,c#,c++,C#,C++,我一直认为它们是关于同一件事,但有人在我的一个答案中指出,这不完全是真的 编辑:是我说的话和我得到的评论。 编辑2: C++之间的区别是什么: public: void foo(int& bar); 和C#s 这里没有“const ref”(我想在C#中,它应该被称为“in”而不是“out”) C#编译器将“ref”视为在函数调用时必须有效的东西,并在您尚未初始化它时进行投诉,而将“out”视为之前不应初始化的东西,必须在返回之前进行赋值 不能在C#中“ref”临时或属性的返回值。有一

我一直认为它们是关于同一件事,但有人在我的一个答案中指出,这不完全是真的

编辑:是我说的话和我得到的评论。 编辑2: C++之间的区别是什么:

public: void foo(int& bar);
和C#s

这里没有“const ref”(我想在C#中,它应该被称为“in”而不是“out”)

C#编译器将“ref”视为在函数调用时必须有效的东西,并在您尚未初始化它时进行投诉,而将“out”视为之前不应初始化的东西,必须在返回之前进行赋值


不能在C#中“ref”临时或属性的返回值。

有一些区别——C#的
ref
仅用于参数,并且只能传递初始化的变量(使用
out
来删除后一个限制);可以更自由地使用C++的引用语法(例如,对于局部变量[必须在定义时初始化],并且不必担心参数的初始化)。。。但总的来说,我想说的是,它们之间的差异非常小。

C++的reference&'和C#的ref是完全不同的

C#中参数的正常对象传递(即没有'ref'或'out')与C++的'reference'传递是等价的。被调用者获得对象的句柄,修改对象上的字段会修改调用者最初传递的对象。在C++中,如果传递正常对象(没有引用),被调用方将获得对象的副本,并修改其字段“<强> > < >强> >影响调用方上下文中的原始对象。在C#中,如果被调用方将一个新对象分配给参数,那么它现在将对新对象进行操作,但调用方不会看到此更改,因为调用方仍将在其上下文中引用旧对象

C#中的“ref”表示被调用方可以实际更改其接收到的句柄。因此,如果他将句柄分配给一个新对象,这个更改在调用方上下文中可见,传递给调用的参数现在将“指向”新对象。这相当于C++将引用传递给指针,以便被调用方可以更改指针指向的地址。C#的'out'只是'ref',在初始化时有一些语义上的甜点,所以以上所有内容都适用于'out'

所有这些当然都适用于C#如何操作对象参数,而不是“值类型”(例如int)。

在C#中,有基本类型(int、structs等)和引用类型(对象)。这些都是内置于语言中的。在C++中,必须显式。这里是一组引用C和C++对象的等价方法,基于它们是引用类型还是基元,以及是否使用REF:< /P>
C# type                     | C++ Type
----------------------------+---------
Primitive type, with no ref | Normal parameter passing
Reference type, with no ref | Pointer (*)
Primitive type, with ref    | Reference (&)
Reference type, with ref    | Reference of a pointer (&*)

这是否意味着“ref”只适用于传递的变量(包含句柄),而不适用于句柄指向的对象?
C# type                     | C++ Type
----------------------------+---------
Primitive type, with no ref | Normal parameter passing
Reference type, with no ref | Pointer (*)
Primitive type, with ref    | Reference (&)
Reference type, with ref    | Reference of a pointer (&*)