问题标签 [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 投票
3 回答
1211 浏览

c++ - Lambda 作为默认参数失败

使用以下代码,我收到最新版本的 clang 和 gcc 错误:

Clang给出错误:

为什么会失败?

0 投票
2 回答
308 浏览

c++ - 具有无效成员函数的模板类

在 C++ 中,使用不能使用其某些成员函数的类来实例化类模板是否合法?

例如:

这段代码可以编译,我可以使用b,只要我不尝试调用b.call_f(). (同样显式实例化它template class Wrapper<B>;会导致编译错误,因为它会实例化所有成员函数。)

这是保证工作还是未定义的行为?如果是这样,C++17 会随着概念和要求的引入而改变吗?

0 投票
2 回答
8874 浏览

c++ - 如何使用 C++ 概念(“concepts lite”)支持构建 gcc?

C++ 标准委员会正在制定概念扩展的 TS(技术规范):“编程语言 - 概念的 C++ 扩展”。N4377是本文档的最新版本。为了包含在 C++ 标准功能中,要求实现,理想情况下是可公开访问的系统。

我知道concept-gcc但上面的概念提案(通俗地称为Concepts Lite)是不同的。我听说有一个概念分支,我尝试了origin/asutton/c++-conceptsfrom gccgit镜像,但没有编译。如何构建和使用上述 [draft] TS 中指定的 gcc 支持概念版本?

0 投票
2 回答
291 浏览

c++ - 了解别名模板

我问了一个对代码有几个引用的问题

我相信我对别名模板有一个普遍的误解:

您为什么不只评估您在enable_if_torconditional_t语句中传递给别名模板的任何模板参数?

上面的代码是否只是一次enable_if_t对多个模板参数进行处理?

其次,我相信我对角色的具体理解有误void_t此评论指出 C++17 标准定义了void_t. 这是我不明白的:

void_t就是一个随意的名字吗?如果我仍然必须定义template <typename...> using void_t = void;我计划使用的任何地方void_t,那么标准化任意名称的意义何在?

0 投票
2 回答
3195 浏览

c++ - 范围保护/范围退出习语是否会标准化?

在范围出口上运行 lambda 似乎是一件基本的事情,我希望它是标准化的。类似的东西unique_ptr在应用时会更好,但我发现需要无穷无尽的“一次性”析构函数,尤其是在利用 C 风格的库时。有谁知道这是否即将到来?

0 投票
2 回答
1324 浏览

c++ - C++ 中的 register 关键字有什么问题?

我正在阅读这篇文章,它说该register关键字很可能会从下一个 C++ 标准中删除。它还说它register在 2011 年被弃用。那么,register存储类说明符有什么问题?

我认为现代编译器非常聪明,它们隐式优化常用变量以提高速度(快速访问)并将它们放入 CPU 寄存器中。

但是,C++ 专家也说不要或永远不要使用register. 因此,register关键字有什么问题?

0 投票
1 回答
304 浏览

c++ - Is there a proposal to extend the C++ language so as to obviate pimpl?

Sometimes, you want to provide a class declaration, which is not merely an opaque forward declaration but has the public functionality exposed - yet you don't want to commit to your private, or implementation-specific, fields and methods. One solution for this is the pimpl idiom - using a pointer to an inner class, housing the implementation of the class exposed publicly.

I don't really like using pimpl and wish the language would allow you to have really-private members - so that code using the class does not 'see' their declaration (and thus probably doesn't need to be recompiled when the implementation details change). Also, recently, I've noticed C++ has been evolving much faster - a 3-year tick-tock pattern in standard updates. So... is there a proposal to add such functionality to C++? Do some compilers currently support it perhaps?

0 投票
1 回答
2899 浏览

c++ - std::bool_constant 背后的基本原理

我想知道,在 C++17 中引入std::bool_constantand (std::true_type以及std::false_typeheader 中定义的比较结构<ratio>,参见 N4389)背后的基本原理是什么?

到目前为止,我只能找到包含以下措辞的文件:

虽然这两篇论文都提到了“基本原理” ——https://issues.isocpp.org/show_bug.cgi?id=51——链接到的评论提要大多指出这是“基于对 c++ 的讨论std-lib*”(大概是指私有反射器?),无需进一步详细说明。

这是文档: http ://en.cppreference.com/w/cpp/types/integral_constant

0 投票
4 回答
3064 浏览

c++ - 讨论了哪些 boost 库以包含在 C++17 中?

对于典型的编程需求,C++11 是一个伟大的里程碑——我们用标准库替换了 95% 的 Boost 代码。

然而,标准库中尚未涵盖的的现状如何?

由于需要 Signals2 和 Lockfree,我开始怀疑。

0 投票
1 回答
1497 浏览

c++ - 为什么要为具有非平凡析构函数的类声明 constrexpr 构造函数(例如 unique_ptr、std::variant)

据我了解(至少对于c++14),如果析构函数constexpr不是微不足道的(隐式生成的 or =default),它就不可能是。constexpr为具有非平凡析构函数的结构声明构造函数有什么意义?

例如std::unique_ptr有一些构造函数 constexpr(默认和nullptr_t),即使析构函数显然是显式定义的(如果对象是,确保它没有效果nullptr,但这并不意味着它仍然有一个显式定义的析构函数来检查对象处于空状态,正如我所见,即使是空析构函数也不允许在编译常量表达式中使用对象)

另一个例子是std::variant的提议:它几乎拥有所有的构造函数,constexpr尽管析构函数有签名~variant()并且它必须call get<T_j> *this).T_j::~T_j() with j being index().

我错过了什么?