MeteorCat
2018-09-18 11:54:32 +08:00
在 C 之中[&引用实在 C++之中才有]
struct ctx{};
void echo(ctx *c){
//do something
//这样
c->speak();
}
而在 C++没有 std::move 值转义的时候
void echo(ctx &c){//这种引用化会导致重复调用构造 /析构
c.speak();//此时使用指针来调用的话性能更好点,防止重复构造 /析构
}
C++11 带有 std::move 语义之下
void echo(ctx &&c){//std::move(ctx);将值语义变化,不再多次触发构造和析构
c.speak();//不再需要指针来防止多次构造和析构
}
其实`->`|`.`取决于你开发的程序
如果是打算开发跨 C/C++的话,需要注意 void echo(ctx &c)这种在 C 不成立,也就不能够出现传入一个 struct 之后直接`.`来调用对象;
如果是低于 C++11 的话,也需要使用插入指针引用,使用`->`防止对象被多次构造析构;
如果是高于等于 C++11 则直接使用 std::move 来转化对象值语义从而使用`.`来调用对象;
-----------------------------------------------
以上可能有很多出错,主要很多知识点都忘了所以凭印象写,具体知识点可以查看《高质量程序设计指南:C++/C 语言》第三版的 7.5 章