c++11专题提供c++11的最新资讯内容,帮你更好的了解c++11。
在第二个到最后一个元素(在C 11中)之后执行循环和停止的最优雅方法是什么? 注意:我的意思是双向迭代器;随机访问迭代器是一个微不足道的特例,当然,因为它们有和 – 运算符. std::list<double> x{1,2,3,4,5,6}; for (auto iter = x.begin(); iter != x.end(); ++iter) { auto iter2 = iter;
在下面的代码中,initialize()说明了一个基于编译时多态的方法.编译的initialize()版本取决于int2type< true>和int2type< false>,对于给定的模板参数T,其中只有一个为真. 它恰好发生在数据成员T * m_datum;将适用于int2type< true>和int2type< false>. 现在,我想更改int2type< false>版本到std
我的问题很简单,我很惊讶我找不到任何相关的东西.可能它很容易或完全愚蠢(或者我无法搜索). 正如标题所说,是否可以在已分配的内存上使用std :: vector,因此它不会从start开始分配新元素,而是使用给定的内容.我会想象它像: T1 *buffer = new T1[some_size]; std::vector<T2> v(buffer, some_size); // <- ofc do
假设你有一个通常永远不会失败的功能,例如: std::string convert_integer_to_string(int x); 在市政当局,这将是noexcept的候选人.但是,最可能涉及的实现涉及动态内存管理,因此在使用new运算符分配内存时总是会抛出std::bad_alloc. 是否建议将该函数注释为noexcept? 从实际的角度来看,以合理的方式处理内存不足的情况是极其困难的.大
我认为这是C 11标准中的(次要)缺陷.在[dcl.dcl]中我们有: simple-declaration:           decl-specifier-seqopt init-declarator-listopt ; decl-specifier-seq不能是可选的. 例如,下面的代码片段无法编译: x; 如果我在这里是正确的,那么第8.3 / 1段的开头也应该改变: 从: A list
#include <functional> #include <iostream> template<typename T> class MaybePtr{ T* ptr; public: MaybePtr(T* p) : ptr(p) {} template <typename F,typename R = std::result_of<F(T*)>::type>
当我尝试包含像< unordered_map>这样的内容时它失败并说该文件不存在,而当我尝试包含< tr1 / unordered_map>有用.然而,找到了在c 03中也存在的包含文件,并且是c 11(类似于< vector>具有移动构造函数).此外,通常也可以找到仅在c 11而不在tr1中的标题,例如< thread>. 它就像tr1中的所有内容一样被抛入tr1文件夹,其他所有内容都包含在内.
假设我有字符串向量,我想通过std :: accumulate连接它们. 如果我使用以下代码: std::vector<std::string> foo{"foo","bar"}; string res=""; res=std::accumulate(foo.begin(),foo.end(),res, [](string &rs,string &arg){ return rs+arg; }
所以今天我写了一个相当难以找到的bug,我将std :: string初始化为nullptr(不是指向std :: string的指针,而是值本身).我发现它显然只能在C 11或更高版本中使用clang. #include <string> #include <iostream> using namespace std; class Meh{ int x; }; class Foo {
在包括单个元素在内的很多情况下,我只是想通过使用std :: tuple来使我的代码更加通用化.我的意思是例如元组< double>而不是双倍.但我决定检查这个特例的表现. 这是简单的性能基准测试: #include <tuple> #include <iostream> using std::cout; using std::endl; using std::get; using std::t
我正在研究一个n吨基类模板.我还不担心懒惰,所以意图是: Ensure a class has only n instances, and provide a global point of access to them. 这是我到目前为止的代码: template<typename Derived, size_t n = 1> class n_ton_base /
#if __cplusplus >= 201103L template <class _Key, class _Tp> union __value_type { typedef _Key key_type; typedef _Tp ma
这两行奇怪的代码是什么意思? thread_guard(thread_guard const&) = delete; thread_guard& operator=(thread_guard const&) = delete; = delete是C 0x的新功能.这意味着一旦用户使用这样的函数,编译器应立即停止编译并抱怨“此函数被删除”(参见:Bjarne Stroustrup的C 0x FAQ
使用 Eclipse Mars,我得到符号’unique_ptr’无法解析错误.我尝试将-std = c 11添加到CDT GCC内置编译器设置,但这没有帮助.当我重新打开Eclipse时,错误就消失了,但是如果我对代码进行了修改,那么错误就会消失. 一个简单的代码示例: std::unique_ptr<String> p1; >在Eclipse Mars中打开Window>偏好> C/C++>构
请考虑以下代码段: class Owner { public: Owner(std::unique_ptr<int> ptr) : owned_pointer<int>(std:move(ptr)) {} private: std::unique_ptr<int> owned_pointer; }; std::unique_ptr<int> ptr(new int); int* ptr1
我想要实现的主要是从C 11中的函数返回一个未命名的结构.在C 14中,我可以通过定义函数内联并将auto作为返回类型来实现,如下所示: auto func() { struct { int member; } ret; // set ret.member return ret; } 但是,C 11不支持推导正常(非lambda)函数的返
This基本上是第21项中给出的示例的副本.在Herb Sutter的书Exceptional C中覆盖虚函数. #include <iostream> #include <complex> using namespace std; class Base { public: virtual void f(int); virtual void f(double); virtu
以下代码: struct X { void f() {} void g() { auto h = &f; } }; 结果是: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form
参见英文答案 > gcc nullptr issue                                    1个 我有以下测试代码: #include <cstdint> #include <cassert> enum class Result : std::uint32_t {SUCCESS = 0, INSUCCESS = 1}; void* func(Result& re
参见英文答案 > Isn’t the const modifier here unnecessary?                                     5个 我认为 this question有点被误解了. 返回const值不是可以被视为无意义的东西.正如Adam Burry在评论中指出的那样,Scott Meyers在更有效的C(第6项)中推荐它,我将添加Herb Sut