相关疑难解决方法(0)

C++中指针变量和引用变量之间有什么区别?

我知道引用是语法糖,因此代码更容易读写.

但有什么区别?


以下答案和链接摘要:

  1. 指针可以重新分配任意次数,而在绑定后无法重新分配引用.
  2. 指针可以指向nowhere(NULL),而引用总是指对象.
  3. 您不能使用指针来获取引用的地址.
  4. 没有"参考算术"(但您可以获取引用所指向的对象的地址,并对其进行指针运算&obj + 5).

澄清一个误解:

C++标准非常谨慎,以避免规定编译器如何实现引用,但每个C++编译器都将引用实现为指针.也就是说,声明如下:

int &ri = i;
Run Code Online (Sandbox Code Playgroud)

如果它没有完全优化,则分配与指针相同的存储量,并将地址i放入该存储中.

因此,指针和引用都使用相同数量的内存.

作为基本规则,

  • 使用函数参数和返回类型中的引用来提供有用的自我文档化接口.
  • 使用指针实现算法和数据结构.

有趣的读物:

c++ pointers reference c++-faq

3115
推荐指数
34
解决办法
94万
查看次数

当应用于变量名时,*和&的含义是什么?

在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++ pointers reference c++-faq

15
推荐指数
1
解决办法
7375
查看次数

带或不带 const/& 符号的 C++ 方括号重载

我正在编写 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)

我的问题如下:

  1. 为什么我有两种方法,一种带关键字const,一种不带关键字?
  2. 我的第二个方法中的&符号(&)有什么作用?
  3. 当我的方法都不是设置器时,为什么可以使用方括号在给定索引处设置值,并且当我设置值时会调用这两个方法中的哪一个?

c++ operator-overloading square-bracket getter-setter

4
推荐指数
1
解决办法
945
查看次数

在 C++ 中取消对 int 和 int& 的迭代器的引用

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

c++

0
推荐指数
1
解决办法
111
查看次数