可能重复:
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()
),因为它可以在我的main()
函数中打印出来,即使它不是static
?我假设它不是指针,因为我可以通过使用.
运算符而不是用于指针的->
来访问size()
方法。
其次,在函数参数中使用&
运算符与使用运算符*
之间有什么区别?它不仅仅是一个简单的变量,如std::string param
?它似乎是这样调用的(foo(test)
而不是foo(&test)
)。
仔细看看C++ *参考*。 – mavam 2012-07-14 19:36:27
这不是一个操作员,它是一个参考。 – Dani 2012-07-14 19:36:45
http://stackoverflow.com/questions/57483/what-are-the-differences-between-pointer-variable-and-reference-variable-in-c – chris 2012-07-14 19:37:18