class stock;
....
函数const stock& top(...)和const stock* top(...)有什么区别,指针那个可以吗?
class stock;
....
函数const stock& top(...)和const stock* top(...)有什么区别,指针那个可以吗?
const讲起来就是个无底洞
举个引用的例子吧
#include <iostream>
#include<string>
using namespace std;
class Stu
{
public:
Stu(string name, int age) // :name(name),age(age)
{
this->name = name;
this->age = age;
}
Stu & Add()
//Stu * const & Add()
{
this->age++;
return *this;
// return this;//this 指针是const类型
}
void display()
{
cout << name << " : " << age << endl;
}
private:
string name;
int age;
};
int main()
{
Stu s("xiaoming", 20);
s.display();
s.Add().Add().Add().Add().Add();
//Add函数返回引用的好处是,你可以进行连加或者比如运算符重载返回引用类型进行连等于运算
//s.Add()->Add()->Add()->Add();
s.display();
return 0;
}
8 回答6.5k 阅读
4 回答686 阅读✓ 已解决
3 回答839 阅读✓ 已解决
2 回答3.4k 阅读
3 回答1.9k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
C++里引用其实只是受限的指针,只是在语义上限制不能对引用这一受限的指针做一些指针能做的操作:重新赋值,拷贝,++,--(暂时还没有想到其他的),并限制不允许为空,以提高安全性,可以理解为是编译器对指针的一种保护模式。
那么,考虑什么时候应该使用引用,又什么时候应该使用指针呢?我认为有几点:
引用优先
指针是允许为空的,而引用不允许。
当然,这种情况下你还是可以坚持使用引用,然后空对象的情况下可以通过throw exception的方式来表达:
合理使用语义暗示,指针暗示拥有(has),引用暗示关联(use):
car
has awheel
trip
use acar
:当然,也是有例外,如果在trip的生存周期里,关联的_car是要求可变的,那就只能使用指针了(因为引用不可以重新赋值):
否则,坚持使用引用的话,想更改_car的指向,就只能重新构造一个新的trip了。
容器中不可保存引用,只能用指针(我猜主要是因为引用被限制了重新赋值及拷贝操作):
最后,随时可以把引用转化为指针:
但是一定要注意情景,这里car只是传进来供maintain方法使用(引用暗示use关系),取指针操作虽然不优雅,尚可以接受,但千万要注意把指针保存下来使用的情况:
在退出maintain方法后,_last_car指向的对象是很有可能会被释放的哦。