返回信息流在看别人写的代码的时候,看到这么一部分,小白表示有点懵。
代码如下:
——————————————————————————————————
constraints_.emplace_back();//constraints_是一个vector
auto* const constraint = &constraints_.back();
ComputeConstraint(constraint);//ComputeConstraint是一个函数,这个函数内部会给constraint赋值。使用的是
//constraint->reset()赋值。
——————————————————————————————————————————
两个问题:
1.emplace_back()在网上说是可以添加一个类,避免重复啥的,但是这么只是这么一个操作,没有添加任何的类,之后又back出来,那back出来什么了呢?
2.用const修饰的constraint这个指针变量是指向vector的最后一个元素地址吗?这个const修饰的值为什么在之后还能赋值呢?
求大神解答,真的是有点懵呀!google了没找到。[ema1][ema1]
这是一条镜像帖。来源:北邮人论坛 / cpp / #95214同步于 2017/5/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求问一个C++中的问题
b1196027787
2017/5/4镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
假设容器存的类型是X
1、emplace_back()不是添加一个类,而是构造一个X的对象,并添加到容器当中,emplace_back()接受的参数将会完美转发给类X的构造函数
2、auto* const constraint = &constraints_.back();这个auto会自动推导为X。此处的const是一个顶层const,指明指针本身是个常量,也就是这个指针一旦初始化完成,就不能再指向其他地址,但是你仍然能够通过这个指针操作指向的对象,例如可以修改该对象的某个字段,或者调用X类的某个非const成员函数
【 在 b1196027787 的大作中提到: 】
: 在看别人写的代码的时候,看到这么一部分,小白表示有点懵。
: 代码如下:
: ——————————————————————————————————
: ...................