问题标签 [c++17]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1344 浏览

c++ - 三元组仍然有效的 C++ 吗?

我们都知道digraphs 和 trigraphs的历史好奇心,但是随着近年来对 C++ 所做的所有更改,我很好奇:它们是有效的 C++14 吗?C++17 怎么样?

0 投票
1 回答
843 浏览

c++ - 如何`std::bind()`一个标准库算法?

我的问题的简短版本是:如何使用std::bind()标准库算法之类的东西?

由于简短版本有点缺乏细节,这里有一点解释:假设我有算法std::transform(),现在我想实现std::copy()(是的,我意识到std::copy()标准 C++ 库中有)。由于我非常懒惰,我显然想使用现有的std::transform(). 当然,我可以这样做:

不知何故,这个实现有点像算法的配置。例如,似乎std::bind()应该能够完成这项工作,但简单地使用std::bind()是行不通的:

问题是编译器无法仅从算法中确定适当的模板参数,并且是否存在无关紧要&。有什么东西可以像使用std::bind()工作这样的方法吗?由于这是前瞻性的,我很高兴有一个解决方案可以处理已经提议包含在 C++ 标准中的任何内容。此外,为了摆脱我的懒惰,我很乐意在前面做一些工作,以便以后使用。可以这样想:在我作为库实施者的角色中,我将把所有东西放在一起,这样每个库用户都可以变得懒惰:我是一个忙碌的实施者,但也是一个懒惰的用户。

如果您想要一个现成的测试台:这里有一个完整的程序。

0 投票
3 回答
3911 浏览

c++ - 为什么 std::uncaught_exception 会变成 std​​::uncaught_exceptions?

我刚刚注意到

http://en.cppreference.com/w/cpp/error/uncaught_exception

那个 C++17 将替换std::uncaught_exception(), 它返回一个bool, with std::uncaught_exceptions(), 它返回一个int.

对描述这一点的标准的补充如下:

http://isocpp.org/files/papers/n4259.pdf

它没有提供理由,但确实说

[注意:当 uncaught_exceptions() > 0 时,抛出异常会导致调用 std::terminate() (15.5.1)。– 结束注]

这是奇怪的模糊。

这种变化的原因是什么?在 C++17 或标准的某些未来版本中是否会出现多个活动异常?

0 投票
1 回答
992 浏览

c++ - 从函数类型中剥离所有限定符

给定一个可能带有cv-qualifier-seq和可能ref-qualifier的 varargs 函数类型,是否可以编写一个类型特征来去除所有限定符而无需编写 4 * 3 * 2 = 24 部分特化?

随着新的事务性内存 TS的加入transaction_safe,这是否意味着我们需要为此编写 48 个部分特化?


编辑:引用这些奇怪函数类型的描述([dcl.fct]/p6,引用 N4140):

具有cv-qualifier-seqref-qualifier的函数类型 (包括由 typedef-name (7.1.3, 14.1) 命名的类型)应仅显示为:

  • 非静态成员函数的函数类型,
  • 指向成员的指针所指的函数类型,
  • 函数 typedef 声明或alias-declaration的顶级函数类型,
  • 类型参数 (14.1) 的默认参数中的类型ID ,或
  • 类型参数(14.3.1)的模板参数类型 ID

[示例

结束示例]

函数声明器中cv-qualifier-seq的效果与在函数类型之上添加 cv-qualification 不同。在后一种情况下,将忽略cv 限定符。[注意:具有cv-qualifier-seq的函数类型不是 cv-qualified 类型;没有 cv 限定的函数类型。—尾注] [示例

结束示例]

返回类型、parameter-type-listref-qualifiercv-qualifier-seq,但不是默认参数 (8.3.6) 或异常规范 (15.4),是函数类型的一部分。[注意:函数类型在函数指针、函数引用和成员函数指针的赋值和初始化过程中被检查。——尾注]

0 投票
5 回答
229 浏览

c++ - 启动时库的自动初始化

我有一堆静态init()方法,需要在应用程序启动时调用。有点像不得不这样做:

一种方法是像这样初始化一个静态变量:

有没有更好的选择?

0 投票
2 回答
1083 浏览

c++ - C++中缩写函数的状态如何?

C++中缩写函数的状态如何?环顾四周,我在 C++ 概念的工作草案中看到了一些提及。同时,GCC 似乎对类似的代码没有问题

现在,如果我使用 编译-Wpedantic,我会收到警告:

这告诉我缩写函数并不完全符合标准。因此,它们在 C++ 标准和常见 C++ 编译器方面的现状如何?

0 投票
3 回答
19270 浏览

c++ - 计算独特项目的更好方法

我只是找到了一种方法来计算向量中唯一项目的数量。这是我最幼稚的做法。

这是标准库中唯一的方法还是更好的方法?

0 投票
1 回答
630 浏览

c++ - 实验性的::可选的 nullopt_t 构造函数

这里描述了为 c++ 提出的对象的nullopt_tand :nulloptoptional

[...] 类型 nullopt_t 不应有默认构造函数。它应该是文字类型。常量 nullopt 应使用文字类型的参数进行初始化。

其原因在文档的 op = {} 语法章节中进行了解释:为了op = {}明确起见,必须采用一些技巧,其中之一就是nullopt_t不能默认构造。

我的问题是文字类型在这里意味着什么?我发现了这个SO 帖子。所以在我看来,只要另一个空班就可以了。它也可以是一个构造函数int吗?

一个最小的符合nullopt_t类是什么样子的?

像这样的东西:

或这个:

0 投票
4 回答
17957 浏览

c++ - 获取 C++ 函数参数的类型

是否有标准方法来获取函数参数的类型并将这些类型作为模板参数包传递?我知道这在 C++ 中是可能的,因为它之前已经完成

我希望使用 C++14 或即将推出的 C++1z,这里会有一种惯用的方式来实现arg_types<F>...

需要明确的是,声称没有标准方法可以做到这一点的答案不是答案。如果没有答案,我希望这个问题一直没有答案,直到解决方案添加到 C++500 或直到宇宙的热寂,以较早发生的为准:)

编辑:已删除的答案指出我可以PRETTY_FUNCTION用来获取参数类型的名称。但是,我想要实际的类型。不是这些类型的名称。

0 投票
2 回答
109 浏览

c++ - C++1z 使用 std::initializer_list 处理 == 测试在自动函数中使用和不使用 const

c_NEXT定义在class AskBase

后来c_NEXT用于template<typename Container> class AskUI

参考这三个()?表达式和return语句 clang++ 报告:

解决错误的建议。

使用命令: