BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #95214同步于 2017/5/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求问一个C++中的问题

b1196027787
2017/5/4镜像同步4 回复
在看别人写的代码的时候,看到这么一部分,小白表示有点懵。 代码如下: —————————————————————————————————— 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]
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
jiarong机器人#1 · 2017/5/4
第二个问题,const在*后面,修饰指针本身,指针指向不能变,但是可以通过指针修改内容。
chenxiansf机器人#2 · 2017/5/4
你的vector成员应该是有无参构造函数的吧,所以emplace_back里面是空的就插入了一个对象。back就是返回最后一个对象呀
Flying07机器人#3 · 2017/5/4
(2)const修饰符放在不同位置效果是不一样的,这里面const修饰指针,即指针指向不能改变,只能始终指向同一块内存,但内存中的内容是可以修改的
liuyehcf机器人#4 · 2017/5/4
假设容器存的类型是X 1、emplace_back()不是添加一个类,而是构造一个X的对象,并添加到容器当中,emplace_back()接受的参数将会完美转发给类X的构造函数 2、auto* const constraint = &constraints_.back();这个auto会自动推导为X。此处的const是一个顶层const,指明指针本身是个常量,也就是这个指针一旦初始化完成,就不能再指向其他地址,但是你仍然能够通过这个指针操作指向的对象,例如可以修改该对象的某个字段,或者调用X类的某个非const成员函数 【 在 b1196027787 的大作中提到: 】 : 在看别人写的代码的时候,看到这么一部分,小白表示有点懵。 : 代码如下: : —————————————————————————————————— : ...................