C返回一个对象副本
我写了以下代码:
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 std :: vector< int> myObject as const? 解决方法
不,编译器不知道调用者将对该对象做什么,除非您对使用该对象的所有代码使用全局优化(编译器通常不能对其使用进行假设;此外,如果对象是从dll它根本不能做出任何假设.
不,无论如何,从非const到const的转换可能是隐含的.
这是一个应该在getMyObject()内完成的optmiziation,但编译器不能确定调用者不会抛弃const.实际上这是关于const的使用的一个非常古老的争论,通常我认为总是将const视为程序员而不是编译器的东西更清楚. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |