2

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是真的吗?

4

1 回答 1

3

函数 f(X a) 的最后一行有什么区别:return a; 而不是返回 std::move(a);?

No.a是函数的局部变量,因此return a可以从中移动。

功能f没有RVO但g有NRVO是真的吗?

正确的。命名省略永远不会应用于函数参数;它仅适用于不是函数参数的局部变量。

于 2017-03-13T20:16:59.200 回答