通过引用混淆?
Pass by reference confusion?
考虑这个例子:
void MyFunction(int &x){...}
void MyOtherFunction(int *x){...}
int main()
{
int my_variable = 10;
MyFunction(my_variable);
MyOtherFunction(&my_variable);
}
我说的这两种方法都是通过引用传递变量(即不创建副本),唯一的区别是 MyOtherFunction 正在接收指针吗?
你说得对,你没有复制 my_variable
,而是复制 pointer is not a reference,它们是两组不同的类型。
例如指针可以为空,可以调用MyOtherFunction(nullptr)
.
是的,没有副本。传递指针意味着你可以传递一个空指针,而使用引用你必须传递一个有效的对象。
对于 int、float 和简单的变量,按值传递并不更昂贵,前提是您不需要在函数内部更改传递的参数。
在您的示例中,您从不复制 my_variable
(尽管您在调用 void MyOtherFunction(int *x){...}
时复制了一个指针,但这没关系)。
这两个函数之间的重要区别在于 MyFunction(int &x)
是一个正确的 C++ 引用并且永远不会为空(在正常代码中),而您可以传递 nullptr MyOtherFunction(int *x)
,并且这必须是在运行时检查。指针版本也可以根据需要在MyOtherFunction
里面重新赋值。
你是对的。在这两个调用中,您都通过引用传递变量。但是,C++ 中的引用术语与 C 中的相同术语不同。
在 C 中,当有人说他通过引用传递参数时,这意味着它传递了一个指向变量的指针。
在 C++ 中,引用具有新的含义。它们是语言规范的一部分。因此,当有人说他通过引用传递参数时,通常意味着相应的参数被声明为引用。:)
按引用传递是 orignal object
的别名。通过指针传递创建额外的变量来保存 original object
.
的地址
考虑这个例子:
void MyFunction(int &x){...}
void MyOtherFunction(int *x){...}
int main()
{
int my_variable = 10;
MyFunction(my_variable);
MyOtherFunction(&my_variable);
}
我说的这两种方法都是通过引用传递变量(即不创建副本),唯一的区别是 MyOtherFunction 正在接收指针吗?
你说得对,你没有复制 my_variable
,而是复制 pointer is not a reference,它们是两组不同的类型。
例如指针可以为空,可以调用MyOtherFunction(nullptr)
.
是的,没有副本。传递指针意味着你可以传递一个空指针,而使用引用你必须传递一个有效的对象。
对于 int、float 和简单的变量,按值传递并不更昂贵,前提是您不需要在函数内部更改传递的参数。
在您的示例中,您从不复制 my_variable
(尽管您在调用 void MyOtherFunction(int *x){...}
时复制了一个指针,但这没关系)。
这两个函数之间的重要区别在于 MyFunction(int &x)
是一个正确的 C++ 引用并且永远不会为空(在正常代码中),而您可以传递 nullptr MyOtherFunction(int *x)
,并且这必须是在运行时检查。指针版本也可以根据需要在MyOtherFunction
里面重新赋值。
你是对的。在这两个调用中,您都通过引用传递变量。但是,C++ 中的引用术语与 C 中的相同术语不同。
在 C 中,当有人说他通过引用传递参数时,这意味着它传递了一个指向变量的指针。
在 C++ 中,引用具有新的含义。它们是语言规范的一部分。因此,当有人说他通过引用传递参数时,通常意味着相应的参数被声明为引用。:)
按引用传递是 orignal object
的别名。通过指针传递创建额外的变量来保存 original object
.