为什么c++中的引用传递用functionName(dataType& variableName)来表示?
Why pass by reference in c++ is denoted by functionName( dataType& variableName)?
在 C++ 中。当我们要定义一个指针变量时,语法是:
dataType* pointerVariable = &variableName;
表示pointerVariable是dataType-pointer类型,存放的是variableName在内存中的地址。现在,当我们想要定义一个通过引用接受参数的函数时,语法是:
void functionName( dataType& argumentName );
当我们要调用那个函数时,语法是:
functionaName( argumentName );
我的问题是,当我们想要定义一个通过引用接收参数的函数时,这意味着一个函数接收一个指针作为参数,为什么我们不使用与定义一个参数相同的语法呢?指针,如下所示:
void functionName (dataType* argumentName);
然后,当我们要调用该函数时,语法为:
functionName(&argumentName);
为什么改进了新语法?
when we want to define a function which receives an argument by reference, which means a function that receives a pointer as an argument
这是你的问题:你混淆了语义和实现。
在 C++ 中作为引用的参数是作为引用的参数。就 C++ 而言就是这样。这是一个参考参数,它的行为就像标准所说的参考参数的行为一样。
在编译器使用的 ABI 中,实现 可能涉及传递指针。但这是编译器做什么的问题,而不是标准定义的 C++ 模型中发生的事情。
why don't we use the same syntax as we used to define a pointer
因为它定义了一个接受 指针 的函数。
指针和引用不是一回事。指针变量可以在不同的时间指向不同的对象;引用变量不能。一旦引用绑定到一个对象,它就会一直绑定到该对象。
指针可以为 NULL。引用 不能 ,或者至少,如果你做了一个会创建 NULL 引用的事情,你已经调用了 UB,所以没有必要讨论程序之后的行为.等等。
然而,引用变量是在后台实现的,这些是 C++ 引用的规则,编译器必须遵守它们。
在 C++ 中。当我们要定义一个指针变量时,语法是:
dataType* pointerVariable = &variableName;
表示pointerVariable是dataType-pointer类型,存放的是variableName在内存中的地址。现在,当我们想要定义一个通过引用接受参数的函数时,语法是:
void functionName( dataType& argumentName );
当我们要调用那个函数时,语法是:
functionaName( argumentName );
我的问题是,当我们想要定义一个通过引用接收参数的函数时,这意味着一个函数接收一个指针作为参数,为什么我们不使用与定义一个参数相同的语法呢?指针,如下所示:
void functionName (dataType* argumentName);
然后,当我们要调用该函数时,语法为:
functionName(&argumentName);
为什么改进了新语法?
when we want to define a function which receives an argument by reference, which means a function that receives a pointer as an argument
这是你的问题:你混淆了语义和实现。
在 C++ 中作为引用的参数是作为引用的参数。就 C++ 而言就是这样。这是一个参考参数,它的行为就像标准所说的参考参数的行为一样。
在编译器使用的 ABI 中,实现 可能涉及传递指针。但这是编译器做什么的问题,而不是标准定义的 C++ 模型中发生的事情。
why don't we use the same syntax as we used to define a pointer
因为它定义了一个接受 指针 的函数。
指针和引用不是一回事。指针变量可以在不同的时间指向不同的对象;引用变量不能。一旦引用绑定到一个对象,它就会一直绑定到该对象。
指针可以为 NULL。引用 不能 ,或者至少,如果你做了一个会创建 NULL 引用的事情,你已经调用了 UB,所以没有必要讨论程序之后的行为.等等。
然而,引用变量是在后台实现的,这些是 C++ 引用的规则,编译器必须遵守它们。