c++11专题提供c++11的最新资讯内容,帮你更好的了解c++11。
给定一个具有两个构造函数的类A,取initializer_list< int>和initializer_list< initializer_list< int>>分别 A v{5,6}; 打电话给前者,和 A v{{5,6}}; 呼吁后者,如预期. (clang3.3,显然gcc的行为有所不同,看到答案,标准要求什么?) 但是如果我删除第二个构造函数,那么A v {{5,6}};仍然编译,它使用第
我很好奇C的内置bool类型的一些行为.据我所知, std::common_type使用隐式可转换性来确定通用类型.我会期望一个表达式与bool和另一种类型会导致bool转换为该类型.例如,我可以看到bool float – > float和bool double – >双.但是,bool int8_t – > int32_t和bool int16_t – > int32_t.为什么会这样? 简答
我试图建立一些启发式来帮助我决定使用适当的std ::线程类. 据我所知,从最高级别(最简单易用,但最不灵活)到最低级别,我们有: > std :: async with / std :: future(std :: shared_future)(当你想在一次性抛出的生产者线程异步时执行) > std :: packed_task(当你想要分配一个生产者,但是延迟对线程的调用) > std ::
我试图使用一个lambda代替一个函数指针,但VS2010似乎不能转换它.我试过使用这样的std ::函数,它崩溃,我不知道如果我这样做正确! #include <windows.h> #include <conio.h> #include <functional> #include <iostream> #include <concrt.h> void main() { std:
以下示例是否编译? struct B; struct A { A(B*&&){} }; struct B : A { B() : A(this){} }; int main(){} 在LWS与clang它编译,但与gcc我得到: no known conversion for argument 1 from ‘B* const’ to ‘B*&&’ 如果我添加一个const它编译. 我
我正在为演员运用新的显式.如果你写的东西 struct Data { explicit operator string(); }; 不可能将数据意外转换为字符串. darget数据类型bool是一个例外:在某些情况下,即使将其标记为显式 – 上下文转换,也允许隐式转换.因此,您可以在if(…)中使用此类型的数据,例如: struct Ok { explicit operator
我有代码: struct A { int a; }; struct B { int b; const A a[2]; }; struct C { int c; const B b[2]; }; const C test = {0, {}}; int main() { return test.c; } 我有gcc 4.8.2和4.9.2.它可以
我这里有这段代码. #include <iostream> using namespace std; template <typename T> inline T bigArry(const T data[5]) { T level = data[0]; for(T item : data) // error C2143: syntax error : missing ',' b
我正在处理一个事件库,而我正在面对Variadic模板的问题. 所有的工作非常好,除了我不能传递引用作为参数的事实… 这是一个非常简化的例子,用来揭示我的问题. struct DelayedSignal { ~DelayedSignal () { std::cout << "~DelayedSignal CLOSE" << std::endl; } templat
我想使用std :: tuple的所有元素作为类的初始化.有没有比元组的每个元素执行std :: get< i-th element>(std :: tuple)更简单的方法? 最小工作示例与std :: get: #include <string> #include <tuple> #include <cassert> struct A { std::string string1;
从析构函数中抛出异常的主要问题是,在析构函数被调用的时刻,另一个异常可能是“in flight”(std :: uncaught_exception()== true),因此在这种情况下不太明显.用新的例外覆盖旧的例外将是处理这种情况的可能办法之一.但是,在这种情况下,必须调用std :: terminate(或另一个std :: terminate_handler). C 11通过std ::
在5.1.1 / 3的C标准[expr.prim.general] Unlike the object expression in other contexts, *this is not required to be of complete type for purposes of class member access outside the member function body. Onl
什么时候建立相对于非constexpr非静态存储持续时间的非本地对象的constexpr对象?在任何其他对象的初始化之前,即在动态初始化之前,他们是否开始生活? 我正在考虑使用一个string_literal class (live example)是否合理,例如比较std :: strings与某些关键字: class string_literal { // private member
我正在读 this answer,作者指的是 boost best practices,其中说: Avoid using unnamed shared_ptr temporaries to save typing; to see why this is dangerous, consider this example: void f(shared_ptr<int>, int); int g();
许多C11 CAS操作(例如,atomic_compare_exchange_weak,atomic_compare_exchange_strong)取两个指针和一个值,即: bool atomic_compare_exchange(T* pointer, T* expected, // pseudodeclaration! T
我正在编写一个C代码,需要访问一个使用timeval作为当前时间表示的旧C库. 在旧包中获取我们使用的当前日期/时间: struct timeval dateTime; gettimeofday(&dateTime, NULL); function(dateTime); // The function will do its task 现在我需要使用C计时器,如: system_clock::t
这是这个场景:我想要一个主机类,它可以有一个可变数量的混合(不是太多的可变模板 – 参见例如 http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.103.144).但是,我也希望由主机类参数化mixins,以便它们可以引用它的公共类型(使用CRTP成语). 当尝试混合这两个问题时出现问题 – 正确的语法对我来说不清楚. 例如,以下代码无法
这个非常简单的代码代码在 GCC 6.0中出现错误: template<class T> struct S { // error: cannot convert 'T' to 'const int' in initialization static const int b = T{}; }; int main() { } 奇怪的是,如果我使用常规大括号(T()),那么代码编译.这
考虑比较正整数的函数;该函数本身使用lambda来做这个工作. // Pass n1, n2 by value to the lambda. bool Compare(int n1, int n2) { return [](int n1, int n2) { return n1 > n2; }; } 上面的代码段编译好了虽然Compare()总是返回true; 但是,以下代码甚至无法编译
在用“for”循环替换了很多“旧”循环之前,我用visual studio 2013进行了一些测试: std::vector<int> numbers; for (int i = 0; i < 50; ++i) numbers.push_back(i); int sum = 0; //vectorization for (auto number = numbers.begin(); numb