std::set<BigObject> set;
auto it = set.begin();
auto& it = set.begin();
类似地,
std::string str("xxxxxxxxx");
std::string sub = str.substr(xx);
std::string& sub = str.substr(xx);
使用引用会将析构函数调用减少吗?为什么?
答案 0 :(得分:2)
在适用时,按价值是最佳选择,您可以负担复制费用。
原因是值语义很容易被理解(表现得像int
)并且比引用和指针更容易出错。
优化器在处理指针和引用时很难,因为它们可以别名(指向相同的对象),或者可以从其他线程引用这些对象,因此无法应用某些重要的优化。有关详细信息,请参阅Chandler Carruth: Optimizing the Emergent Structures of C++。