c++1z相关内容
我记得有人曾经告诉我, “不需要 auto 在基于范围的for循环中, not 在语言中是不明确的,如果我们删除它的话。“ 这是一个真正的语句吗? 以下代码是有效的C ++语法吗? for(elem:range){...} 有效的语法,但是当我去编译与 铿锵++ - std = c ++ 1z ,我被显示以下错误: 基于范围的循环需要
..
委员会改变了基于范围的循环: C ++ 11: { auto&& __range = range_expression; for(auto __begin = begin_expr,__end = end_expr; __begin!= __end; ++ __ begin){ range_declaration = * __ begin; loop_statemen
..
我刚刚注意到了 http://en.cppreference.com/w/cpp/error/uncaught_exception C ++ 17将替换 std :: uncaught_exception(),它返回一个 bool ,其中 std :: uncaught_exceptions(),它返回一个 int 。 添加标准描述这里是: http://isocpp.or
..
与所有其他类似问题相反,这个问题是关于使用新的C ++功能。 2008 c 有没有一个简单的方法将C ++枚举转换为字符串? 2008 c 简单的方式将枚举类型的变量用作C中的字符串? 2008 c ++ 如何轻松地将c ++枚举映射到字符串 2008 c ++ 同时创建一个C标识符和一个字符串? 2008 c ++ 有没有一个简单的脚本将C ++枚举转换为字符串? 2009 c
..
从 std :: vector 或其他容器中删除具有特定属性的元素的任务适用于函数式实现:为什么要烦恼循环,内存释放和 然而,在C ++中这样做的标准方法似乎是以下成语: p $ p> std :: vector ints; ... ints.erase( std :: remove_if(ints.begin(), ints.end(), [] {return
..
看起来我不能将一个不捕获的lambda作为模板参数传递给一个模板化的函数指针函数。我是以错误的方式做,还是不可能? #include //由函数指针模板化的函数 template void fun(int i) { F(i); } void f1(int i) { std :: cout
..
我想了解哪个版本的ang苹果安装在我的macbook中,用c ++ 11和/或c ++ 14的功能可以看到。 我键入了此命令: clang --version // --- -response Apple LLVM版本7.0.0(clang-700.1.76) 目标:x86_64-apple-darwin15.0.0 线程模型:posix 但我不能理解(c
..
如果没有其他重载(例如 f(T&)或 f(volatile T&& c $ c>)( template f(T& amp;); ,则 T&&& 是所谓的转发引用和 T 是 U 或 U& 一些 cv限定类型 U 。但是对于成员函数的 cv-ref-qualifiers ,没有这样的规则。在 struct S {void f()&& {; }}; a S :: f()始终为rvalue-引
..
请考虑以下程序: #include int main() { int n = 3; int fact = 1; for(auto i {1}; i fact * = i; std :: cout
..
从STL中删除集合中的项目需要使用经常使用的技术,已成为惯用语: erase-remove-idiom 这个成语最常见的用法之一是删除 T 从向量 std :: vector widget_collection; Widget widget; widget_collection.erase( std :: remove(widget_colle
..
聚合初始化需要用户提供的构造函数。但是 std :: tuple 和 std :: pair 对有大的重载的构造函数。从核心语言的角度来看,这些构造函数是用户提供的还是用户声明的? (更新/澄清:其中nocopy是不能被复制或移动的类,例如 std :: mutex )。 p> auto get_ensured_rvo_str(){ return std :: pair(std :
..
我们都知道历史好奇心是二合字母和三字母,但是所有的变化对C ++在最近几年我很好奇:他们是有效的C ++ 14? 解决方案 Trigraphs目前有效,但不会太长! Trigraphs被提议在C ++ 0x中弃用,它被作为C ++ 11发布为 。这是IBM的反对,代表自己和 的其他用户的C ++,结果三字母保留在 C ++ 0x。然后在C ++ 17中再次建议删除(不仅仅是
..
特别是Clang 3.6.0,目前由Coliru托管。 所有这些代码片段都来自: int main(){ foo(); std :: cout void foo(Args ... args){ std ::
..
请考虑以下代码: template struct foo {}; int main(){ foo F; (void)f; } 在clang 3.8.0上使用 -std = c ++ 11 或 -std = c ++ 14 ,程序编译。当使用 -std = c ++ 1z 编译时,会出现以下错误: main.cp
..
我使用以下代码得到clang和gcc的最新版本的错误: int main(){ auto lambda = [](auto = [] {}){}; lambda(); } Clang出现错误: prog.cc:在函数'int main()': prog.cc:3:12:error:no match for调用'(main()::
..
这里介绍了可选对象的code> nullopt_t 和 nullopt / p> struct nullopt_t {see below}; constexpr nullopt_t nullopt(unspecified); [...] 类型nullopt_t不应该有默认构造函数。它应该是 字面类型。常量nullopt将用一个参数 初始化为字面类型。
..
这里介绍了可选对象的code> nullopt_t 和 nullopt / p> struct nullopt_t {see below}; constexpr nullopt_t nullopt(unspecified); [...] 类型nullopt_t不应该有默认构造函数。它应该是 字面类型。常量nullopt将用一个参数 初始化为字面类型。
..
我要实现 has_no_duplicates type trait,计算结果为 std :: true_type 如果传递的可变参数类型列表没有重复类型。 static_assert(has_no_duplicates {},“”); static_assert(!has_no_duplicates {},“”);
..
C ++ 17添加了 std :: hardware_destructive_interference_size 和 std :: hardware_constructive_interference_size 。首先,我认为这只是一种获取L1缓存行大小的便携式方法,但这是一个过度简化。 问题: 这些常量与L1缓存行大小有什么关系? 有没有一个很好的例子来演示他们的用例? li>
..
看起来我们可以安全地使用静态存储持续时间的对象的构造函数中使用 std :: cout 对象问题。 但是,我不完全确定我们可以安全地使用它们在变量模板的情况下: #include T x = T {}; void foo() { class Test { public: Test(){std
..