C 11元组与复制省略或移动语义
我写了一个如下函数:
template <typename T> std::tuple<std::vector<T>,T,T> f() { std::vector<T> p(1000); return std::make_tuple(std::move(p),10,10); } 由于返回类型非常复杂,是否保证在c 11下编译器将在构造结果时应用复制省略或移动语义,或者我必须明确说出类似std :: move(std :: make_tuple(std: :move(p),10))? 解决方法
AFAIK复制省略始终是可选的.标准只是明确地说允许编译器进行这样的优化,因为它改变了可观察的行为,它没有强制要求它.特别是12.8 p. 31:
免责声明:这是来自社区草案n3690,但c 11的版本有不同的声明,如果不完全相同. 顺便说一下,标准就在那里指定. 但是,对于移动,它是有保证的.你创建一个临时对象并返回它(即std :: make_tuple返回一个右值并向前传递它),模板的参数不会改变对移动语义的支持. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |