Questions tagged «c++17»

C ++ 17是2017年批准的C ++标准的名称。它以以前的C ++ 14标准为基础,改进了核心语言和标准库,并添加了一些新的语言功能。

1
C ++ 17的新功能是什么?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 C ++ 17现在已完成功能,因此不太可能经历大的更改。针对C ++ 17提出了数百个建议。 其中哪些功能是在C ++ 17中添加到C ++的? 使用支持“ C ++ 1z”的C ++编译器时,当编译器更新到C ++ 17时,哪些功能将可用?
1007 c++  standards  c++-faq  c++17 


6
迭代器失效规则
C ++容器的迭代器失效规则是什么? 最好是摘要列表格式。 (注意:这本来是Stack Overflow的C ++ FAQ的一个条目。如果您想批评以这种形式提供FAQ的想法,则可以在开始所有这些操作的meta上进行发布。)该问题在C ++聊天室中进行监控,该问题最初是从FAQ想法开始的,所以提出这个想法的人很可能会读懂您的答案。)
543 c++  c++11  iterator  c++17  c++-faq 

28
在现代C ++ 11 / C ++ 14 / C ++ 17和未来的C ++ 20中枚举为字符串
与所有其他类似问题相反,该问题与使用新的C ++功能有关。 2008年 C 有没有简单的方法可以将C ++枚举转换为字符串? 2008年 C 在C中将枚举类型的变量用作字符串的简单方法? 2008年 C ++ 如何轻松地将C ++枚举映射到字符串 2008年 C ++ 使某些东西既是C标识符又是字符串? 2008年 C ++ 是否有一个简单的脚本将C ++枚举转换为字符串? 2009年 C ++ 如何在C ++中将枚举用作标志? 2011年 C ++ 如何将枚举类型变量转换为字符串? 2011年 C ++ 枚举到字符串C ++ 2011年 C ++ 如何将枚举类型变量转换为字符串? 2012年 C 如何在C中将枚举名称转换为字符串 2013年 C 在C中对条件编译的枚举进行字符串化 阅读许多答案后,我尚未找到任何答案: 使用C ++ …
354 c++  string  enums  c++17  c++20 

1
std ::洗钱的目的是什么?
P0137引入了功能模板, std::launder并在有关并集,生存期和指针的部分中对标准进行了许多更改。 本文要解决的问题是什么?我必须了解的语言有哪些变化?那我们在做launder什么?


4
是什么使i = i ++ +1; 在C ++ 17中合法吗?
在开始大叫未定义的行为之前,N4659(C ++ 17)中明确列出了它。 i = i++ + 1; // the value of i is incremented 但是在N3337(C ++ 11)中 i = i++ + 1; // the behavior is undefined 发生了什么变化? 从我可以收集的资料中,从[N4659 basic.exec] 除非另有说明,否则对单个运算符的操作数和单个表达式的子表达式的求值是无序列的。运算符的操作数的计算在运算符结果的值计算之前进行排序。如果相对于同一存储位置上的另一副作用或使用同一存储位置中任何对象的值进行的值计算相对于一个存储位置的副作用是未排序的,并且它们潜在地不是并发的,则该行为是不确定的。 其中值是在定义[N4659 basic.type] 对于平凡可复制的类型,值表示形式是对象表示形式中确定值的一组位,该值是实现定义的一组值中的一个离散元素 从[N3337 basic.exec] 除非另有说明,否则对单个运算符的操作数和单个表达式的子表达式的求值是无序列的。运算符的操作数的计算在运算符结果的值计算之前进行排序。如果相对于同一标量对象上的另一副作用或使用同一标量对象的值进行的值计算,未对标量对象的副作用进行排序,则该行为未定义。 同样,值在[N3337 basic.type]中定义 对于普通可复制类型,值表示形式是对象表示形式中确定值的一组位,该值是实现定义的一组值中的一个离散元素。 除了提及并发无关紧要,并且使用内存位置而不是标量对象外,它们是相同的 算术类型,枚举类型,指针类型,指向成员类型的指针std::nullptr_t以及这些类型的cv限定版本统称为标量类型。 这不影响示例。 来自[N4659 expr.ass] 赋值运算符(=)和复合赋值运算符均从右到左分组。它们都需要一个可修改的左值作为其左操作数,并返回一个引用左操作数的左值。如果左操作数是位字段,则在所有情况下结果都是位字段。在所有情况下,赋值都在左右操作数的值计算之后和赋值表达式的值计算之前进行排序。右操作数在左操作数之前排序。 来自[N3337 expr.ass] 赋值运算符(=)和复合赋值运算符均从右到左分组。它们都需要一个可修改的左值作为其左操作数,并返回一个引用左操作数的左值。如果左操作数是位字段,则在所有情况下结果都是位字段。在所有情况下,赋值都在左右操作数的值计算之后和赋值表达式的值计算之前进行排序。 …

6
C ++ 11、14、17或20是否为pi引入标准常数?
在C和C ++中,数字pi存在一个相当愚蠢的问题。我所知道的M_PImath.h,任何标准都不要求定义。 新的C ++标准在标准库中引入了许多复杂的数学运算-双曲函数std::hermite和std::cyl_bessel_i,不同的随机数生成器等。 是否有任何“新”标准为pi引入常数?如果没有-为什么?没有它,所有这些复杂的数学如何工作? 我知道有关C ++中pi的类似问题(它们已有好几年历史了,并且已经成为标准)。我想知道问题的当前状态。 我也对为什么 C ++仍然没有pi常量但具有很多更复杂的数学的原因非常感兴趣。 UPD:我知道我可以将pi定义为4 * atan(1)或acos(1)或double pi = 3.14。当然。但是为什么在2018年我仍然必须这样做?没有pi的标准数学函数如何工作? UPD2:根据这个在科隆在2019年7月C ++委员会会议之行报告,建议P0631(数学常数)被接纳进入C ++ 20。这样看来,终于在标准库中有了数字pi了!

1
什么是string_view?
string_view是添加到C ++ 17 的C ++库基础TS(N3921)中的一项建议功能 据我了解,它是代表某种类型的字符串“概念”的一种类型,它是可以将任何可视内容存储为字符串的任何类型的容器的视图。 这是正确的吗 ? 规范 const std::string&参数类型应变为string_view? 还有string_view要考虑的另一个重要点吗?


9
一次性写“ if”的最优雅方式
由于C ++ 17可以编写一个if块,该块将被完全执行一次,如下所示: #include <iostream> int main() { for (unsigned i = 0; i < 10; ++i) { if (static bool do_once = true; do_once) { // Enter only once std::cout << "hello one-shot" << std::endl; // Possibly much more code do_once = false; } } } 我知道我可能对此有过多的思考,还有其他方法可以解决此问题,但是仍然-是否可以这样写,所以do_once = false最后不需要了吗? …
136 c++  if-statement  c++17 

6
Lambda回归自我:这合法吗?
考虑这个相当无用的程序: #include <iostream> int main(int argc, char* argv[]) { int a = 5; auto it = [&](auto self) { return [&](auto b) { std::cout << (a + b) << std::endl; return self(self); }; }; it(it)(4)(6)(42)(77)(999); } 基本上,我们试图制作一个返回自身的lambda。 MSVC编译程序,然后运行 gcc编译程序,并进行段错误 clang拒绝该程序并显示一条消息: error: function 'operator()<(lambda at lam.cpp:6:13)>' with deduced return type cannot …

3
内联变量如何工作?
在2016年Oulu ISO C ++标准会议上,标准委员会将名为Inline Variables的提案投票选入C ++ 17。 用外行的话来说,什么是内联变量,它们如何工作以及它们有什么用?内联变量应如何声明,定义和使用?
124 c++  c++17 

3
polymorphic_allocator:我什么时候以及为什么要使用它?
这是有关cppreference的文档,这是工作草案。 我必须承认,我不了解其真正目的是什么polymorphic_allocator以及何时/为什么/如何使用它。 例如,pmr::vector具有以下签名: namespace pmr { template <class T> using vector = std::vector<T, polymorphic_allocator<T>>; } 什么是polymorphic_allocator要约?std::pmr::vector老式的报价又是什么std::vector?到现在为止我还不能做什么? 该分配器的真正目的是什么,我什么时候应该实际使用它?
122 c++  allocator  c++17 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.