当前位置:  开发笔记 > 编程语言 > 正文

c ++ rvalue引用转发性能

如何解决《c++rvalue引用转发性能》经验,为你挑选了1个好方法。

我正在做一些实验,试图了解转发是如何工作的,并且我遇到了我不理解的情况.

当我用clang 3.8 -O3编译时

class Foo {
  Foo(const std::string& s) : str(s) {}
  std::string str;
};

class Foo {
  Foo(std::string&& s) : str(std::forward(s)) {}
  std::string str;
};

Foo foo("this is a test")在第一种情况下构造Foo 几乎快2倍.

为什么?



1> Vittorio Rom..:

std::forward只有在处理转发引用时才需要完美转发.转发引用仅存在于模板推导的上下文中.

void f(std::string&& x):x是一个常规的右值引用,因为没有发生模板类型推导.

template void f(T&& x):x是一个转发引用,因为T模板扣除.

通常,std::forward除非您正在处理转发引用,否则您不想使用.

调用时std::forward,您必须传递转发值的确切类型.这可以这样做:std::forward(x).

或者,当您有推导类型的名称时:

template 
void f(T&& x)
{
    something(std::forward(x));
}

我会写这样的代码:

class Foo {
  template 
  Foo(T&& s) 
      : str(std::forward(s)) {}

  std::string str;
};

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有