小编dvi*_*ide的帖子

C++ 0x右值参考模板参数推导

考虑到GMan 在这里auto_cast炮制美味邪恶的实用功能,我一直试图弄清楚为什么当我试图从rvalue(在MSVC 10.0上)时它不能为我编译.auto_cast

这是我正在使用的代码:

template <typename T>
class auto_cast_wrapper : boost::noncopyable
{
  public:
    template <typename R>
    friend auto_cast_wrapper<R> auto_cast(R&& pX);

    template <typename U>
    operator U() const
    {
      return static_cast<U>( std::forward<T>(mX) );
    }

  private:
    //error C2440: 'initializing': cannot convert from 'float' to 'float &&'
    auto_cast_wrapper(T&& pX) : mX(pX) { }

    T&& mX;
};

template <typename R>
auto_cast_wrapper<R> auto_cast(R&& pX)
{
  return auto_cast_wrapper<R>( std::forward<R>(pX) );
}

int main()
{
  int c = auto_cast( 5.0f );  // …
Run Code Online (Sandbox Code Playgroud)

c++ rvalue-reference c++11

8
推荐指数
1
解决办法
2532
查看次数

在Visual C++ 2010 Beta 2上复制elision

我在读" 想要速度"?C++ Next博客传递Value并创建此程序以了解复制省略并在C++ 0x中移动语义:

#include <vector>
#include <iostream>

class MoveableClass {
public:
    MoveableClass() : m_simpleData(0), instance(++Instances) {
        std::cout << "Construct instance " << instance << " (no data)" << std::endl;
    }

    MoveableClass(std::vector<double> data) : m_data(std::move(data)), m_simpleData(0), instance(++Instances) {
        std::cout << "Construct instance " << instance << " (with data)" << std::endl;
    }

    MoveableClass(int simpleData) : m_simpleData(simpleData), instance(++Instances) {
        std::cout << "Construct instance " << instance << " (with simple data)" << std::endl;
    } …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++ visual-studio-2010-beta-2 copy-elision c++11

6
推荐指数
1
解决办法
959
查看次数