llk*_*llk 2 c++ function dereference address-operator
我想知道C++ 函数调用中地址运算符&
和引用运算符之间的区别。*
例如采用以下函数
void foo (std::string& param)
{
param = "Bar.";
std::cout << param.size();
}
Run Code Online (Sandbox Code Playgroud)
让我们在main()
函数中这样调用它......
int main()
{
std::string test;
foo(test); //Why not foo(&test)?
std::cout << test; //Prints out the value "Bar."
}
Run Code Online (Sandbox Code Playgroud)
首先,为什么&
运算符允许我像指针一样分配一个值(当它不是指针时,为它分配一个在 RAII 和函数范围内保留的值),因为它可以在我的函数foo()
中打印出来main()
即使不是static
?我假设它不是指针,因为我可以size()
使用.
运算符而不是->
用于指针的运算符来访问该方法。
&
其次,在函数参数中使用运算符与使用运算符有什么区别*
?它与像这样的普通变量有什么不同吗std::string param
?它似乎是这样称呼的(foo(test)
而不是foo(&test)
)。
&
函数参数具体表示该参数是通过引用传入的(传统上编译器将其实现为指针),这就是为什么您会在main()
.
static
与此无关。
&
使用and向函数声明参数的区别*
在于,第二个允许nullptr
传入 a (或不存在或只是一个简单的无效地址),同时保证&
该函数的参数引用了一个真实的对象。除此之外,两者都提供类似的功能,允许通过引用更改原始对象。
归档时间: |
|
查看次数: |
10071 次 |
最近记录: |