C++ 在c+中,引用总是更好的选择吗+;

C++ 在c+中,引用总是更好的选择吗+;,c++,performance,reference,C++,Performance,Reference,通过使用引用,Destructor调用的时间会减少吗?为什么呢?如果适用,并且您可以负担复制费用,那么按价值排序是最佳选择 原因是值语义很容易理解(行为类似于int),并且比引用和指针更不容易出错 优化器在处理指针和引用时会遇到困难,因为这些指针和引用可以是别名(指向相同的对象),或者可以从其他线程引用这些对象,因此无法应用某些重要的优化。请参阅详细信息。该代码无效,不能将临时绑定到非const引用(除非使用VisualC++,默认情况下不遵守该规则)。如果使用引用const,代码将变得有效。现

通过使用引用,Destructor调用的时间会减少吗?为什么呢?

如果适用,并且您可以负担复制费用,那么按价值排序是最佳选择

原因是值语义很容易理解(行为类似于
int
),并且比引用和指针更不容易出错


优化器在处理指针和引用时会遇到困难,因为这些指针和引用可以是别名(指向相同的对象),或者可以从其他线程引用这些对象,因此无法应用某些重要的优化。请参阅详细信息。

该代码无效,不能将临时绑定到非const引用(除非使用VisualC++,默认情况下不遵守该规则)。如果使用引用const,代码将变得有效。现在,假设您这样做了(对于正常的迭代器来说,这并不是一种真正的药剂),编译器仍然可以轻松地省略副本构造,使两个变体的性能相同。
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);