這個符號特別容易混淆, 因為在C++中, &有兩種不同用法:
- 獲得變量地址
- 引用傳遞
第一個例子,
int main()
{
std::string s = "Hello";
std::string*p = &s;
std::cout << p << std::endl;
std::cout << *p << std::endl;
return 0;
}
0x7ffd05129510
Hello
[Finished in 0.2s]
例子中, 變量p使用*聲明為指針, 將變量s的地址通過&符號賦值給p.
int main()
{
std::string s = "Hello";
std::string &r = s;
std::cout << s << std::endl;
std::cout << r << std::endl;
r = "New Hello";
std::cout << s << std::endl;
std::cout << r << std::endl;
std::cout << &s << std::endl;
std::cout << &r << std::endl;
std::cout << (&s == &r) << std::endl;
return 0;
}
Hello
Hello
New Hello
New Hello
0x7ffc844cc660
0x7ffc844cc660
1
[Finished in 0.2s]
例子中, 變量r是變量s的reference, 在內存空間中指代相同的位置.
&可以用於函數變量引用聲明,
void foo(std::string& str)
{
str[0] = 'a';
std::cout << str << std::endl;
}
int main()
{
std::string s = "Hello";
foo(s);
return 0;
}
在這個例子中, 變量str在函數foo中是變量s的 reference, 所有對str的操作, 相當於對s的操作.
