相关疑难解决方法(0)

为什么`std :: move`命名为`std :: move`?

C++ 11 std::move(x)函数根本不会移动任何东西.它只是一个转换为r值.为什么这样做?这不是误导吗?

c++ c++-faq rvalue-reference move-semantics c++11

120
推荐指数
2
解决办法
1万
查看次数

移动构造函数被逗号运算符抑制

这个程序:

#include <iostream>
struct T {
    T() {}
    T(const T &) { std::cout << "copy constructor "; }
    T(T &&) { std::cout << "move constructor "; }
};
int main() {
    ([](T t) -> T { return t; })({}); std::cout << '\n';
    ([](T t) -> T { return void(), t; })({}); std::cout << '\n';
    ([](T t) -> T { return void(), std::move(t); })({}); std::cout << '\n';
}
Run Code Online (Sandbox Code Playgroud)

当由gcc-4.7.1输出编译时(链接):

move constructor 
copy constructor 
move constructor 
Run Code Online (Sandbox Code Playgroud)

为什么逗号运算符有这种效果?标准说:

5.18逗号运算符[expr.comma]

1 - …

c++ return comma-operator move-semantics c++11

13
推荐指数
2
解决办法
382
查看次数

C++ 11 move(x)实际上是指static_cast <X &&>(x)?

刚读完Stroustrup的C++编程语言第4版,他在第7章中说:

move(x)表示static_cast<X&&>(x)X是x的类型

由于move(x)不移动x(它只是产生对x的rvalue引用),如果move()被称为rval()则会更好

我的问题是,如果move()只是将变量转换为rval,那么实现对变量的引用"移动"的实际机制是什么(通过更新指针)?

我认为move()就像一个移动构造函数,除了客户端可以使用move()来强制编译器?

c++ move move-semantics c++11

11
推荐指数
2
解决办法
1248
查看次数