返回信息流只传cur
和&*cur 都是传相同的地址,这样做有什么意义呢
这是一条镜像帖。来源:北邮人论坛 / cpp / #101940同步于 2022/5/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求问一下 cur是一个指针
gzy19990617w
2022/5/24镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
如果 cur 是指针类型(T*),那 &*cur 等价于 cur
不过,注意到 c++ 的 opeartor* 运算符可以被重载,所以若使用模板,cur 并不一定需要是指针类型(T*),也可以是“类似于指针的东西”,只要它能够被解引用即可;例如 shared_ptr<T>,或者 iterator。因此,&*cur 可以保证将 cur 指向的数据以裸指针的方式传递
例如:
std::shared_ptr<T> cur: &*cur → cur.get()
std::string cur: &*cur.begin() → cur.data()
感谢!明白了!
【 在 pyth0n 的大作中提到: 】
: 如果 cur 是指针类型(T*),那 &*cur 等价于 cur
: 不过,注意到 c++ 的 opeartor* 运算符可以被重载,所以若使用模板,cur 并不一定需要是指针类型(T*),也可以是“类似于指针的东西”,只要它能够被解引用即可;例如 shared_ptr<T>,或者 iterator。因此,&*cur 可以保证将 cur 指向的数据以裸指针的方式传递
: ............
功能一样,但一般用来表达不一样的意义。
指针是一个“右值”。你可以把这个值存起来,以后通过这个指针来访问数据。
而引用是一个“左值”,本身就是那个存着值的空间。一般来说,传引用的时候,并不希望接收到引用的一方把这个引用存起来以后用,而是希望接收方趁这个引用还有效的时候访问里面的数据。当然,也不尽然,但大概是这样的意义。
这有点像Rust里面的“引用”一样,有个“生命周期”。只是Rust违反了生命周期的规则会导致编译错误,而C++编译时并不检查误用。
你可以认为你那段代码的“myctl::connect(&something)”只会在这个函数运行的过程中使用something或者拷贝/移动里面的内容,返回以后就不用了。当然,保险起见,建议看看文档。
感谢!
【 在 nuanyangyang 的大作中提到: 】
: 功能一样,但一般用来表达不一样的意义。
: 指针是一个“右值”。你可以把这个值存起来,以后通过这个指针来访问数据。
: ............
cpp和java都会啊。巨佬
【 在 nuanyangyang (暖羊羊) 的大作中提到: 】
: 功能一样,但一般用来表达不一样的意义。
: 指针是一个“右值”。你可以把这个值存起来,以后通过这个指针来访问数据。
: ...................
你看错了,那个不是声明语句,那个是表达式语句
【 在 nuanyangyang (暖羊羊) 的大作中提到: 】
: 功能一样,但一般用来表达不一样的意义。
: 指针是一个“右值”。你可以把这个值存起来,以后通过这个指针来访问数据。
: ...................