c++1z相关内容
在JavaScript ES6中,有一种称为解构的语言功能。 在JavaScript ES6中,它如下所示: var animal = { species:'dog', weight:23, sound:'woof' } $ b b //解构 var {物种,声音} =动物 //狗说哇! console.log(''+ species +'says'+ soun
..
看起来我们可以安全地使用静态存储持续时间的对象的构造函数中使用 std :: cout 对象问题。 但是,我不完全确定我们可以安全地使用它们在变量模板的情况下: #include T x = T {}; void foo() { class Test { public: Test(){std
..
在JavaScript ES6中,有一种称为解构的语言功能。 在JavaScript ES6中,它如下所示: var animal = { species:'dog', weight:23, sound:'woof' } $ b b //解构 var {物种,声音} =动物 //狗说哇! console.log(''+ species +'says'+ soun
..
提出的 N4191 fold表达式到C ++。其定义是 (args + ...) 是左折叠(即(((a0 + a1)+ a2)+ ...) ,以及 (... + args) 是一个右折叠(即(... +(a8 +(a9 + a10))) ,修订文件 N4295 问题:什么是理由?这似乎更直观(至少当你使用从左到右的字母表)从左到右评估(args
..
查看C ++ 17 论文(和 cppreference ),我很困惑为什么选择只与运营商合作?乍一看,它似乎可以更容易扩展(... + args)只需推一个 + args 的元素之间的标记,但我不相信这是一个伟大的决定。让我们以总和为例: template auto sum(Ts& ... args){ return(args + ... + 0)
..
Eric Niebler在他的博客上讨论范围 采访@BjarneStroustrup关于他的想法re C ++ 17 ISO C ++标准委员会(SC 22)提案N4128 公平 - 我没有阅读官方的建议。我只是一个谦卑的C ++程序员,想使用简单的范围功能。我应该怎么做今天而不是后面的C + + 17使用,说,简单的整数范围与步幅?当然,我的要求可能会扩大,因为我开始实际使用范围,但我
..
不是最好使用以下形式声明的 std :: declval : template T declval(); //(1) 当前一个: template T&& declval(); //(2) std :: common_type common_type 的行为使用(1)更接近三元运算符的行为(但不使用 std
..
这个问题的灵感来自这个答案。我不知道什么是/是在给定的标准中简化它的最好的方法。我知道并亲自使用/仍然使用,因为C ++ 14是宏 REQUIRES(x): 定义: 模板 struct requires_enum { 枚举类型类型 { none, all }; }; #define REQUIRES(...)requires_enum
..
给定一个可能具有 cv-qualifier-seq 和可能的 ref-qualifier 的varargs函数类型,可以写一个类型trait, 模板 struct strip_function_qualifiers; template struct strip_function_qualifiers
..
如何编写 constexpr 函数来交换整数的字节序,而不需要依赖编译器扩展,你能给出一个如何做的例子吗? 解决方案 是的,这很容易;这里是一个递归(C ++ 11兼容)实现(仅限无符号整数类型): #include #include template co
..
模块是可能添加到C ++ 1z的#includes的替代品。 Clang有一个完整的C ++实现。 使用 import std.io; C ++源文件中的 无法正常工作(编译),因为C ++ 1z规范模块(包括语法)不是最终的。 clang文档指出,当传递 -fmodules 标志时,#includes将被重写到他们适当的进口。然而,检查预处理
..
已有两个支持C ++模块的编译器 clang:http://blogs.msdn.com/b/vcblog/ archive / 2015/12/03 / c-modules-in-vs-2015-update-1.aspx 现在开始一个新项目时,我应该注意什么,以便能够采用模块功能,当它最终在我的编译器中发布? 是可能使用模块并仍然保持与不支持它的旧编译器的兼容性? 解决
..
auto 在(可能)使用C ++ 17引入的模板参数中有什么优点? 当我想实例化模板代码时,它是 auto 的自然延伸吗? auto v1 = constant // v1 == 5,decltype(v1)is int auto v2 = constant // v2 == true,decltype(v2)is bool auto v3 = cons
..
我们可以将可变参数模板参数限制为某种类型吗?即,实现这样的东西(当然不是真正的C ++): struct X {}; auto foo(X ... args) 这里我的意图具有接受可变数量的 X 参数的函数。 最接近的是: p> template auto foo(Args ... args)
..
我问了一个问题,其中有多个代码引用: 模板 using void_t = void; 我相信我有一个一般误解别名模板: 您是否在 enable_if_t 或 conditional_t 语句中传递别名模板? 上面的代码只是一次对多个模板参数执行 enable_if_t ? 其次,我相信我对 void_t 的
..
我只是注意到了 http://en.cppreference.com/w/cpp/error/uncaught_exception C ++ 17将替换 std :: uncaught_exceptions(),返回 bool $ c>,它返回一个 int 。 > http://isocpp.org/files/papers /n4259.pdf 它不提供理由,但它说
..
我听说过某个地方,使用新的C ++ 1z语法,很容易检查一个类型是否在variadic模板参数包中传递 - 显然你可以使用接近一行长的代码。这是真的?这些相关的功能是什么? (我尝试查看折叠表达式,但我不能看到如何使用它们在该问题...) 这是我如何解决问题在C + + 11供参考: #include template
..
使用C ++ 17,我们可以返回不可移动(包括不可复制的)类型,例如 std :: mutex ,通过可以被认为是保证返回值优化(RVO):通过简化值保证复制精确度类别: struct nocopy {nocopy(nocopy&)= delete; nocopy()= default; }; auto getRVO(){ return nocopy(); } 我
..
我试图折叠表达式与clang 3.6'--std = c + + 1z',但我不太明白的东西。我测试的功能是: auto minus = [](auto ... args){return(args - ...); }; ... std :: cout
..
我想在编译时检查用户文字 _name 是否为类型 Ret 和参数 Arg 。虽然我有半解决方案,它需要至少定义一次运算符: #include #include struct one {}; struct two {}; //我们需要至少一个下面的模板定义来编译 一个操作符“”_x(char const *){retu
..