c++ - 函数调用中 * 和 & 运算符的区别

标签 c++ function dereference address-operator

<分区>

Possible Duplicate:
C++ functions: ampersand vs asterisk
What are the distinctions between the various symbols (*,&, etc) combined with parameters?

我想知道 C++ 函数调用中地址运算符 & 和引用运算符 * 之间的区别。例如采用以下功能

void foo (std::string& param)
{
     param = "Bar.";
     std::cout << param.size();
}

然后让我们在我们的 main() 函数中这样调用它...

int main()
{
      std::string test;
      foo(test);          //Why not foo(&test)?
      std::cout << test;  //Prints out the value "Bar."
}

首先,为什么 & 运算符允许我分配一个值,就好像它是一个指针(分配给它一个在 RAII 和函数 foo() 范围内存活的值 当它不是指针时),因为即使它不是 static 也可以在我的 main() 函数中打印出来?我假设它不是指针,因为我可以使用 . 运算符而不是 -> 来访问 size() 方法用于指针。

其次,在函数参数中使用 & 运算符与使用 * 运算符有什么区别?它甚至与像 std::string param 这样的普通变量不同吗?它似乎是这样调用的(foo(test) 而不是 foo(&test))。

最佳答案

& 函数参数特别表示该参数是通过reference 传入的(传统上编译器将其实现为指针),这就是为什么您会看到这样的效果在你的 main() 中赋值。 static 与此无关。

使用 &* 声明函数参数的不同之处在于,第二个参数允许 nullptr(或非存在或只是一个普通的无效地址)被传入,而 & 保证这个函数的参数引用了一个真实的对象。除此之外,两者都提供了类似的功能,允许通过引用更改原始对象。

关于c++ - 函数调用中 * 和 & 运算符的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11486818/

相关文章:

页面加载后的 Jquery .On()

c - 指针算术 : By how much is y increased?

c++ - 看似基本的C++问题

c++ - Visual Studio 发布中令人费解的 STL 错误

c++ - Arduino Sublime Text 2。我可以编译但不能上传。错误 "The system cannot find the file specified"

javascript - 为什么执行变量语句?

C++ - 使用递归函数创建金字塔时出错

perl - 在 Perl 中是否有安全取消引用的便利?

c - 在GDB中,*(x+value)=value有什么作用?

c++ - 如何构建自定义 libcurl 以仅支持 HTTP/HTTPS 协议(protocol)