【发布时间】:2017-02-24 08:08:15
【问题描述】:
constC++中的函数参数修饰符表示该函数不能改变参数值,但不保证在函数执行过程中不能被其他人改变。因此,编译器无法根据数据不变性进行任何优化。
据我了解,右值引用意味着给定对象是临时的,因此没有其他人可以访问其数据。在这种情况下编译器可以进行积极的优化吗?
它将允许通过某种方式获得更快的代码
template<class T>
class Immutable
{
private:
const T val;
public:
operator const T && () { return std::move(val); }
};
(只是示例代码),或者通过const&& 传递值,当我们确定它们在函数调用期间无法更改时。有没有可能,还是有一些未提及的问题?
【问题讨论】:
-
定义“被别人改变”
-
表示被其他对象中的非常量引用改变了。
-
看我的回答。有不同的场景。一个是“被另一个线程更改”,另一个是“被同一线程更改”
-
您的示例证明
const T&&不必绑定到临时对象,并且可能有多个右值引用绑定到同一事物:Immutable<int> i{}; const int&& r1 = i; const int&& r2 = i;。所以这与const&的情况没有什么不同。
标签: c++ optimization constants compiler-optimization rvalue-reference