问题标签 [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.
c++ - Lambda 作为默认参数失败
使用以下代码,我收到最新版本的 clang 和 gcc 错误:
Clang给出错误:
为什么会失败?
c++ - 具有无效成员函数的模板类
在 C++ 中,使用不能使用其某些成员函数的类来实例化类模板是否合法?
例如:
这段代码可以编译,我可以使用b
,只要我不尝试调用b.call_f()
. (同样显式实例化它template class Wrapper<B>;
会导致编译错误,因为它会实例化所有成员函数。)
这是保证工作还是未定义的行为?如果是这样,C++17 会随着概念和要求的引入而改变吗?
c++ - 如何使用 C++ 概念(“concepts lite”)支持构建 gcc?
C++ 标准委员会正在制定概念扩展的 TS(技术规范):“编程语言 - 概念的 C++ 扩展”。N4377是本文档的最新版本。为了包含在 C++ 标准功能中,要求实现,理想情况下是可公开访问的系统。
我知道concept-gcc但上面的概念提案(通俗地称为Concepts Lite)是不同的。我听说有一个概念分支,我尝试了origin/asutton/c++-concepts
from gcc的git
镜像,但没有编译。如何构建和使用上述 [draft] TS 中指定的 gcc 支持概念版本?
c++ - 范围保护/范围退出习语是否会标准化?
在范围出口上运行 lambda 似乎是一件基本的事情,我希望它是标准化的。类似的东西unique_ptr
在应用时会更好,但我发现需要无穷无尽的“一次性”析构函数,尤其是在利用 C 风格的库时。有谁知道这是否即将到来?
c++ - C++ 中的 register 关键字有什么问题?
我正在阅读这篇文章,它说该register
关键字很可能会从下一个 C++ 标准中删除。它还说它register
在 2011 年被弃用。那么,register
存储类说明符有什么问题?
我认为现代编译器非常聪明,它们隐式优化常用变量以提高速度(快速访问)并将它们放入 CPU 寄存器中。
但是,C++ 专家也说不要或永远不要使用register
. 因此,register
关键字有什么问题?
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?
c++ - std::bool_constant 背后的基本原理
我想知道,在 C++17 中引入std::bool_constant
and (std::true_type
以及std::false_type
header 中定义的比较结构<ratio>
,参见 N4389)背后的基本原理是什么?
到目前为止,我只能找到包含以下措辞的文件:
- http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4334.html
- http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4389.html
虽然这两篇论文都提到了“基本原理” ——https://issues.isocpp.org/show_bug.cgi?id=51——链接到的评论提要大多指出这是“基于对 c++ 的讨论std-lib*”(大概是指私有反射器?),无需进一步详细说明。
这是文档: http ://en.cppreference.com/w/cpp/types/integral_constant
c++ - 讨论了哪些 boost 库以包含在 C++17 中?
对于典型的编程需求,C++11 是一个伟大的里程碑——我们用标准库替换了 95% 的 Boost 代码。
然而,标准库中尚未涵盖的库的现状如何?
由于需要 Signals2 和 Lockfree,我开始怀疑。
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().
我错过了什么?