小编dea*_*ean的帖子

引用超载,与单值传递+ std :: move相比?

看来关于C++ 0x的rvalues的主要建议是添加移动构造函数并将运算符移动到类中,直到编译器默认实现它们.

但是如果使用VC10,等待是一种失败的策略,因为自动生成可能不会在VC10 SP1之前,或者在最坏的情况下,VC11.可能,等待这个将是多年来衡量.

这就是我的问题.编写所有这些重复的代码并不好玩.这看起来很不愉快.但对于那些认为很慢的课程来说,这是一个很受欢迎的负担.对于数百个(如果不是数千个)较小的类而言,情况并非如此.

::叹气:: C++ 0x应该让我写更少的代码,而不是更多!

然后我有了一个想法.很多人都愿意共享,我猜.

为什么不按价值传递一切?不会std :: move + copy elision使这几乎达到最佳状态吗?

示例1 - 典型的Pre-0x构造函数

OurClass::OurClass(const SomeClass& obj) : obj(obj) {}

SomeClass o;
OurClass(o);            // single copy
OurClass(std::move(o)); // single copy
OurClass(SomeClass());  // single copy
Run Code Online (Sandbox Code Playgroud)

缺点: rvalues的浪费副本.

例2 - 推荐的C++ 0x?

OurClass::OurClass(const SomeClass& obj) : obj(obj) {}
OurClass::OurClass(SomeClass&& obj) : obj(std::move(obj)) {}

SomeClass o;
OurClass(o);            // single copy
OurClass(std::move(o)); // zero copies, one move
OurClass(SomeClass());  // zero copies, one move
Run Code Online (Sandbox Code Playgroud)

优点:大概是最快的.
缺点:很多代码!

示例3 …

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

49
推荐指数
1
解决办法
2960
查看次数

C++(0x)中是否存在无操作"无用"功能对象?

我意识到这对于需要不到2秒钟实施的事情来说是一个荒谬的问题.但我依稀记得读过新标准引入的那个.

我grep'ed VC10的标题,并没有得到什么.你能帮我吗?这让我烦恼!:)

编辑: 第二个想法,我记得的新仿函数可能是无关的std::default_deleter.

c++ functional-programming no-op c++11

22
推荐指数
1
解决办法
7588
查看次数