标签: c++11

什么是std :: promise?

我相当熟悉C++ 11的std::thread,std::asyncstd::future部件(例如见这个答案),这是直接的.

但是,我不能完全理解std::promise它是什么,它做什么以及在哪种情况下最好使用它.标准文档本身不包含其类概要之外的大量信息,也不仅仅是:: thread.

有人可以给出一个简短,简洁的例子,说明std::promise需要哪种情况以及最惯用的解决方案?

c++ multithreading standard-library promise c++11

367
推荐指数
7
解决办法
8万
查看次数

C++模板typedef

我上课了

template<size_t N, size_t M>
class Matrix {
    // ....
};
Run Code Online (Sandbox Code Playgroud)

我想typedef创建一个Vector(列向量),它相当于一个Matrix大小为N和1的东西.这样的东西:

typedef Matrix<N,1> Vector<N>;
Run Code Online (Sandbox Code Playgroud)

这会产生编译错误.以下内容创建了类似的内容,但并不完全符合我的要求:

template <size_t N>
class Vector: public Matrix<N,1>
{ };
Run Code Online (Sandbox Code Playgroud)

是否有解决方案或不太昂贵的解决方法/最佳实践?

c++ templates typedef c++11

356
推荐指数
1
解决办法
16万
查看次数

353
推荐指数
18
解决办法
30万
查看次数

用g ++编译C++ 11

我正在尝试将我的C++编译器更新为C++ 11.我已经搜索了一下,我得出的结论是我必须使用旗帜,-std=c++0x或者-std=gnu++0x我不知道很多关于旗帜的事情.谁能帮我?(我正在使用Ubuntu 12.04.)

这是我尝试使用C++ 11中包含的库(即数组)时从编译器获得的错误:

#include <array>
#include <iostream>

int main()
{
    std::array<int, 3> arr = {2, 3, 5};
    ...
}
Run Code Online (Sandbox Code Playgroud)

此文件需要编译器和库支持即将推出的ISO C++标准C++ 0x.此支持目前是实验性的,必须使用-std = c ++ 0x或-std = gnu ++ 0x编译器选项启用.

c++ flags g++ c++11

349
推荐指数
6
解决办法
69万
查看次数

如何在CMake中激活C++ 11?

当我尝试运行CMake生成的makefile来编译我的程序时,我得到了错误

C++ 98模式不支持基于范围的循环.

我尝试添加add_definitions(-std=c++0x)到我的CMakeLists.txt,但它没有帮助.我也试过这个:

if(CMAKE_COMPILER_IS_GNUCXX)
    add_definitions(-std=gnu++0x)
endif()
Run Code Online (Sandbox Code Playgroud)

当我这样做时g++ --version,我得到:

g ++(Ubuntu/Linaro 4.6.1-9ubuntu3)4.6.1

我也试过SET(CMAKE_CXX_FLAGS "-std=c++0x"),这也行不通.

我不明白如何使用CMake激活C++ 11功能.

cmake c++11

349
推荐指数
12
解决办法
35万
查看次数

为什么列表初始化(使用花括号)比替代品更好?

MyClass a1 {a};     // clearer and less error-prone than the other three
MyClass a2 = {a};
MyClass a3 = a;
MyClass a4(a);
Run Code Online (Sandbox Code Playgroud)

为什么?

我在SO上找不到答案,所以让我回答一下我自己的问题.

c++ syntax initialization c++11 list-initialization

349
推荐指数
5
解决办法
13万
查看次数

从函数返回unique_ptr

unique_ptr<T>不允许复制构造,而是支持移动语义.然而,我可以unique_ptr<T>从函数返回一个并将返回的值赋给变量.

#include <iostream>
#include <memory>

using namespace std;

unique_ptr<int> foo()
{
  unique_ptr<int> p( new int(10) );

  return p;                   // 1
  //return move( p );         // 2
}

int main()
{
  unique_ptr<int> p = foo();

  cout << *p << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码按预期编译和工作.那么该行如何1不调用复制构造函数并导致编译器错误呢?如果我必须使用line 2而不是它有意义(使用line 2也可以,但我们不需要这样做).

我知道C++ 0x允许此异常,unique_ptr因为返回值是一个临时对象,一旦函数退出就会被销毁,从而保证返回指针的唯一性.我很好奇这是如何实现的,它是在编译器中特殊的,还是在语言规范中有一些其他条款可以利用?

c++ unique-ptr c++11

328
推荐指数
6
解决办法
14万
查看次数

三阶规则与C++ 11一起成为五次规则?

因此,在观看了关于右值引用的精彩演讲之后,我认为每个类都会受益于这样的"移动构造函数",template<class T> MyClass(T&& other) 编辑,当然还有"移动赋值运算符",template<class T> MyClass& operator=(T&& other)正如Philipp在他的回答中指出的,如果它已经动态分配成员,或通常存储指针.就像你应该有一个copy-ctor,赋值运算符和析构函数,如果之前提到的点适用.思考?

c++ constructor rvalue-reference rule-of-three c++11

325
推荐指数
5
解决办法
7万
查看次数

什么时候应该在C++ 11中使用constexpr功能?

在我看来,拥有"总是返回5的功能"正在破坏或淡化"调用函数"的含义.必须有一个原因,或者需要这种能力,或者它不会出现在C++ 11中.为什么会这样?

// preprocessor.
#define MEANING_OF_LIFE 42

// constants:
const int MeaningOfLife = 42;

// constexpr-function:
constexpr int MeaningOfLife () { return 42; }
Run Code Online (Sandbox Code Playgroud)

在我看来,如果我编写了一个返回字面值的函数,并且我进行了代码审查,有人会告诉我,我应该声明一个常量值而不是写回返5.

c++ constexpr c++11

322
推荐指数
9
解决办法
11万
查看次数

什么是内联命名空间?

C++ 11允许inline namespaces,其所有成员也自动在封闭中namespace.我想不出任何有用的应用 - 有人可以给出一个简短,简洁的例子,说明inline namespace需要哪种情况以及最常用的解决方案?

(另外,当发生了什么并不清楚,我namespace声明inline在一个但不是所有的声明,这可能住在不同的文件.这难道不是找麻烦?)

c++ namespaces c++11 inline-namespaces

320
推荐指数
6
解决办法
5万
查看次数