C++ RVO: when it happens?
C++ RVO: when it happens?
http://coliru.stacked-crooked.com/a/c795a5d2bb91ae32
#include <iostream>
struct X {
X(const char *) { std::cout << 1; }
X(const X &) { std::cout << 2; }
X(X &&) { std::cout << 3; }
};
X f(X a) {
return a;
}
X g(const char * b) {
X c(b);
return c;
}
int main() {
f("hello"); // 13
g("hello"); // 1
}
函数f(X a)
的最后一行是否有任何区别: return a;
代替return std::move(a);
?
函数f
没有RVO是正确的,但是g
具有NRVO?
函数f(x a)的最后一行是否有任何区别:返回a;而不是返回std ::移动(a);?
否。a
是该函数的局部变量,因此return a
可以从中移动。
函数
f
没有RVO是真的,但是g
具有NRVO?
正确。命名Elision永远不会适用于函数参数;它仅适用于不是函数参数的本地变量。
相关文章:
- 为什么我会" void value not ignored as it ought to be"?
- 为什么当我为 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时,我会得到一个 const 引用?
- Is it good to use SDL_PIXELFORMAT_UNKNOWN?
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- QString::utf16(): Is it UB or not?
- 我正在"void value not ignored as it ought to be"我该怎么办?
- GotW #88 中的"It doesn’t work for references that are members of objects"是什么意思?
- 如何使用set<pair<int,int> >::iterator itrator it迭代set<pair<int,int> >st中的值?
- CMap with CArray Inside it
- 这个给定的代码应该将给定的数字转换为尽可能滞后的数字,no.by 用 9.It 替换合适的数字是行不通的
- 为什么在使用 auto&&it=--vec.end(),是 UB 时自动推导左值引用?
- 您可以使用C 从在线编译器(repl.it)打开文件吗?
- 如何修复类"Invalid operands to binary expression "类" to "类" "错误 (repl.it)
- 在 std::list 中,std::d istance(it.begin(), std::p rev(it.end()
- 尝试分配函数指针时获取"Void value not ignored as it ought to be"
- 创建结构并传递IT功能
- C++ RVO: when it happens?
- "void value not ignored as it ought to be" - 出了什么问题?
- 在模板中使用类型类型的类型类型使用模板类别IT自我
- 在 Eclipse.It 中运行C++代码时出错,'Your program cannot output..'