【发布时间】:2012-05-30 14:26:03
【问题描述】:
我写了以下代码:
class MyObjectHolder {
public:
std::vector<int> getMyObject() const {
return myObject;
}
private:
std::vector<int> myObject;
};
在我的程序的某个时刻,我尝试使用 getMyObject 方法,并且只对检索到的对象使用 const 方法:
const std::vector<int> myObject = myObjectHolder.getMyObject();
myObject.size();
int a = myObject.front();
-
现在,编译器是否有可能优化此代码,以便不复制
std::vector<int>?编译器是否有可能确定我只在检索到的对象上使用
const方法(假设后面没有发生mutable废话) 不会复制对象,而是对MyObjectHolder的private成员执行这些const操作? 如果是,如果我没有将
const std::vector<int> myObject明确声明为const,是否有可能?如果不是,不这样做的原因是什么?在哪些情况下,这种优化将难以实施/推断它是可能的并且在这里/等等......?
【问题讨论】:
-
RVO 涉及临时对象。除非我遗漏了什么,否则这里没有临时对象,所以没有 RVO。
-
@hmjd 对。我不应该在这里谈论
RVO,而是直接使用private变量可能进行的优化。谢谢。
标签: c++ optimization copy copy-constructor rvo