我知道引用是语法糖,因此代码更容易读写.
但有什么区别?
以下答案和链接摘要:
NULL),而引用总是指对象.&obj + 5).澄清一个误解:
C++标准非常谨慎,以避免规定编译器如何实现引用,但每个C++编译器都将引用实现为指针.也就是说,声明如下:
Run Code Online (Sandbox Code Playgroud)int &ri = i;如果它没有完全优化,则分配与指针相同的存储量,并将地址
i放入该存储中.
因此,指针和引用都使用相同数量的内存.
作为基本规则,
有趣的读物:
在C++中,有什么区别:
void func(MyType&); // declaration
//...
MyType * ptr;
func(*ptr); // compiler doesnt give error
func(ptr); // compiler gives error i thought & represents memory address so
// this statement should correct as ptr is only a pointer
// or address of some real var.
Run Code Online (Sandbox Code Playgroud) 我正在编写 C++ 代码,并遇到了一种情况,我希望为我的类重载方括号运算符。从各种来源,我发现您通常使用两种方法来执行此操作,一种使用const关键字,另一种不使用关键字,但在方法名称之前const使用与号 ( )。&下面给出一个例子。
int MyClass::operator[](unsigned int i) const {
return this->values[i];
}
int & MyClass::operator[](unsigned int i) {
return this->values[i];
}
Run Code Online (Sandbox Code Playgroud)
我的问题如下:
const,一种不带关键字?&)有什么作用?int main()
{
vector<int> v={1,2,4};
int &a=*v.begin();
cout<<a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
v.begin()在上面的代码段中,分配给 的迭代器的取消引用值&a。打印a显示 1
int main()
{
vector<int> v={1,2,4};
int a=*v.begin();
cout<<a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里,迭代器被引用,并且值被分配给a(不带 &)。打印a仍然显示 1。
我仍在学习 C++,我不明白为什么第一个代码块有效。意味着什么int &a?