c++11相关内容
我使用libgc,C和C ++的垃圾收集器。 为了使STL容器垃圾回收,必须使用gc_allocator。 而不是写 std :: vector 必须写 std :: vector > 有一种方法可以定义 模板 typedef
..
在GCC上使用C ++ 11进行可变模板编程时,偶尔会出现一个错误,“对不起,未实现:无法将'Identifier ...'扩展成一个固定长度的列表。如果我删除代码中的“...”,然后我得到一个不同的错误:“错误:参数包不扩展与'...'”。 如果我有“...”,GCC调用一个错误,如果我把“...”出来,GCC调用一个错误。 我唯一能够处理这一点的方法是使用不同的方法从头完全重写模板
..
在当前草案的17.6.4.2.1 / 1和17.6.4.2.1 / 2中标准限制了用户在命名空间std 中注入的特殊化。 如果C ++ 程序在命名空间中添加了声明或定义,那么它的行为是未定义的 std 或 命名空间中的命名空间 std ,除非另有规定。程序可以将任何标准库模板的模板专用化 添加到命名空间 std 中,只要声明依赖于用户定义的类型 ,专业化满足原始模板的标
..
请查看以下简单代码: class Foo { public: Foo(){} 〜Foo(){} Foo(const Foo&){} Foo& operator =(const Foo&){return * this; } }; static Foo g_temp; const Foo& GetFoo(){return g_temp; }
..
我写了一个traits类,让我提取关于函数或函数对象的参数和类型的信息在C ++ 0x(用gcc 4.5.0测试)。一般情况下处理函数对象: template struct function_traits { template struct _internal {}; template
..
因为 std :: function 是可复制的,所以标准要求用于构造std :: function的可调用也是可复制的: n337(20.8.11.2.1) template函数(F f); 需要: F 应为CopyConstructible。对于参数类型 ArgTypes 和返回类型 , f 应为可调用(20.8.11.2) / code>。 A的复制构造
..
在C ++ 11中有一堆新的随机数生成器引擎和分布函数。他们线程安全吗?如果你在多个线程之间共享一个随机分布和引擎,它是安全的,你还会收到随机数吗?我正在寻找的情况是,像 void foo(){ std :: mt19937_64 engine(static_cast(system_clock :: to_time_t(system_clock :: now()))
..
我是C ++的初学者。我遇到了 override 关键字在我正在工作的头文件中使用。我可以知道, override 的实际使用是什么,或许有一个例子很容易理解。 解决方案 override 关键字用于两个目的: 它向代码的读者显示“这是一个虚方法,即覆盖了基类的一个虚方法”。 编译器也知道它是一个覆盖可以“检查”您不改变/添加您认为被覆盖的新方法。 要解释后者: cl
..
可以在头文件中写入以下内容: inline void f(){std :: function func = [] {}; } 或 class C {std :: function func = [] {}; C () {} }; 我猜在每个源文件中,lambda的类型可能不同,因此在 std :: funct
..
编辑:解决了查看评论 - 不知道如何标记为解决了一个答案。 在c ++ 0x中的完美转发/移动语义是一个什么导致相信这是一个写一个新的赋值运算符的好方法。 #include #include #include struct my_type { my_type(std :: string name_) :
..
我喜欢提供有用的错误/消息,我也想为 static_assert 这样做。问题是,它们依赖于模板参数。通常,这些参数将由于引起的错误而在路上或另一个上显示,但是它们是模糊的或不分组的,因此它们是有意义的。示例: 模板
..
在使用gcc编译时,何时需要使用标志 -stdlib = libstdc ++ 用于编译器和链接器? 编译器是否自动使用libstdc ++? 我在Ubuntu 13.10上使用gcc4.8.2,我想使用c ++ 11标准。我已经通过 -std = c ++ 11 到编译器。 解决方案 在Linux :一般来说,所有常见的linux发行版都会默认使用libstdc ++。如果你
..
我安装了Xcode 4.3并想测试这个C ++ 11程序: #include
..
我无法找到关于此的任何最新信息。 Do C ++ 11版本的STL容器有一定程度的线程安全性? / p> 我预期他们不会,由于性能原因。但是,再次,这就是为什么我们有 vector :: operator [] 和 vector :: at 。 解决方案 由于现有的答案不覆盖它(只有一个注释),我只提到23.2.2 [container.requirements .datara
..
传统上,在C ++中避免多个头包含的标准和可移植方法是/是使用 #ifndef - #define - #endif 预编译指令称为宏观防护计划(请参阅下面的代码段)。 #ifndef MY_HEADER_HPP #define MY_HEADER_HPP ... #endif 然而,在大多数实现/编译器(见下图)中有一个更“优雅”的替代方案,其作用与宏指令方
..
我刚刚实现了快速排序算法,使用C ++ 11可变参数模板在编译时评估它。但是,当数据集太大时,我遇到性能问题。 #include struct Seq {}; template struct Seq
..
std :: function和标准函数指针之间的区别是什么? : typedef std :: function功能; typedef int(* fn)(int); 它们是否是同样的东西? 解决方案 函数指针是在C ++中定义的实际函数的地址。 std :: function 是一个包装器,可以容纳任何类型的可调用对象(看
..
假设我正在写一些容器模板或其他东西。而时间到了专门 std :: swap 为它。作为一个好的公民,我将通过做这样的事情来启用ADL: template& x,my_template& y){ using std :: swap; swap(x.something_that_is_a_T,y.s
..
我有兴趣学习C ++更彻底,现在C ++ 11显然已批准。什么编译器当前实现最接近的事情可用于完整的C + + 11支持?编译器如何接近完全支持? 解决方案 有一个
..
我想写这个 typedef void(* FunctionPtr)();使用使用创建 解决方案 它有一个类似的语法,除非从指针中删除标识符: 使用FunctionPtr = void(*)(); 以下是示例 如果你想“夺走丑陋”,请尝试Xeo建议的内容: #include 使用Func
..