Questions tagged «c++20»

C ++ 20是C ++ 17之后的C ++版本的目标。对于与C ++ 20有关的C ++功能,应使用此标签(与C ++标签一起使用)。

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 

2
什么是“跨度”?何时使用?
最近,我得到了span<T>在代码中使用的建议,或者在网站上看到了使用spans的答案-据说是某种容器。但是-我在C ++ 17标准库中找不到类似的东西。 那么,这是什么神秘的东西?span<T>为什么(如果不标准)使用它是一个好主意?

3
什么是C ++中的<=>运算符?
当我试图了解C ++运算符,我偶然发现了一个奇怪的比较操作上cppreference.com,*在一个看起来像这样的表: 我想:“好吧,如果它们是C ++中的常用运算符,我最好学习它们。” 但是我为阐明这个奥秘所做的所有尝试都没有成功。即使在这里,在Stack Overflow上我也没有运气。 &lt;=&gt;和C ++之间是否有连接? 如果有的话,这个运算符的作用是什么? *同时,cppreference.com更新了该页面,现在包含有关&lt;=&gt;运算符的信息。

5
为什么我们需要需求?
C ++ 20概念的角落之一是在某些情况下您必须编写requires requires。例如,此示例来自[expr.prim.req] / 3: 甲需要表达也可以在使用需要子句([温度])作为写在模板参数特设约束,如下面的一个的一种方法: template&lt;typename T&gt; requires requires (T x) { x + x; } T add(T a, T b) { return a + b; } 第一个需求引入了require-clause,第二个需求引入了require-expression。 需要第二个requires关键字的技术原因是什么?为什么我们不能只允许写作: template&lt;typename T&gt; requires (T x) { x + x; } T add(T a, T b) { return a + …
161 c++  c++-concepts  c++20 

2
C ++ 20是否要求将源代码存储在文件中?
但是,一个有点奇怪的问题是,如果我没记错的话,C ++源代码不需要文件系统来存储其文件。 拥有一个可以通过相机扫描手写纸的编译器将是一个符合要求的实现。尽管实际上没有太大意义。 但是,C ++ 20现在使用添加了源位置file_name。现在,这是否意味着源代码应始终存储在文件中?


3
C ++ 20中的协程是什么?
什么是协程 C ++ 20? 它与“ Parallelism2”或/和“ Concurrency2”有何不同(请看下图)? 下图来自ISOCPP。 https://isocpp.org/files/img/wg21-timeline-2017-03.png
104 c++  coroutine  c++20 

2
为什么C ++ 20中引入了std :: ssize()?
C ++ 20引入了以下std::ssize()免费功能: template &lt;class C&gt; constexpr auto ssize(const C&amp; c) -&gt; std::common_type_t&lt;std::ptrdiff_t, std::make_signed_t&lt;decltype(c.size())&gt;&gt;; 似乎可以使用实现static_cast,将size()cl ass C的成员函数的返回值转换为其有符号的对等。 由于size()C 的成员函数始终返回非负值,所以为什么有人要将它们存储在带符号的变量中?万一真的要,那很简单static_cast。 为什么std::ssize()在C ++ 20中引入?
99 c++  stl  unsigned  signed  c++20 


2
在C ++ 20之前将malloc用于int未定义行为
有人告诉我,以下代码在C ++ 20之前具有未定义的行为: int *p = (int*)malloc(sizeof(int)); *p = 10; 真的吗? 该论点是int对象的生存期在分配值之前没有开始(P0593R6)。若要解决此问题,new应使用放置: int *p = (int*)malloc(sizeof(int)); new (p) int; *p = 10; 我们真的必须调用一个琐碎的默认构造函数来启动对象的生存期吗? 同时,该代码在纯C语言中没有未定义的行为。但是,如果我int在C代码中分配一个并在C ++代码中使用它会怎样? // C source code: int *alloc_int(void) { int *p = (int*)malloc(sizeof(int)); *p = 10; return p; } // C++ source code: extern "C" int *alloc_int(void); …

2
为什么在C ++ 20中的依赖类型之前不需要指定“ typename”?
这部分代码在C ++ 20中编译(使用gcc 10.1),而typename在依赖类型之前未使用关键字std::vector&lt;T&gt;::iterator。为什么要编译? #include &lt;vector&gt; template&lt;typename T&gt; std::vector&lt;T&gt;::iterator // Why does this not require "typename" before it? f() { return {}; } int main() { auto fptr = &amp;f&lt;int&gt;; } 代码游乐场

3
没有为C ++ 20中的自定义太空飞船运算符实现定义平等运算符
我&lt;=&gt;在C ++ 20中使用新的宇宙飞船运算符遇到一种奇怪的行为。我正在将Visual Studio 2019编译器与一起使用/std:c++latest。 这段代码可以正常编译: #include &lt;compare&gt; struct X { int Dummy = 0; auto operator&lt;=&gt;(const X&amp;) const = default; // Default implementation }; int main() { X a, b; a == b; // OK! return 0; } 但是,如果我将X更改为: struct X { int Dummy = 0; auto operator&lt;=&gt;(const X&amp; …

2
为什么对于许多标准库类型在C ++ 20中删除了operator!=?
根据cppreference,std::type_info::operator!=被C ++ 20删除,但是std::type_info::operator==显然仍然存在。 背后的原因是什么?我可能同意比较不平等是没有意义的,但是比较相等也同样是没有意义的,不是吗? 同样,operator!=在许多其他标准库类型中,包括容器,例如std::unordered_map::operator!=和,std::unordered_set::operator!=将根据cppreference在C ++ 20中将其删除。 相比之下,必须编写if(!(id1 == id2))并不会使任何代码更清晰if(id1 != id2),相反,相反……


2
C ++ 20中的指定初始值设定项
我对c ++ 20功能之一(指定的初始化程序)有疑问(有关此功能的更多信息,请点击此处) #include &lt;iostream&gt; constexpr unsigned DEFAULT_SALARY {10000}; struct Person { std::string name{}; std::string surname{}; unsigned age{}; }; struct Employee : Person { unsigned salary{DEFAULT_SALARY}; }; int main() { std::cout &lt;&lt; std::boolalpha &lt;&lt; std::is_aggregate_v&lt;Person&gt; &lt;&lt; '\n'; // true is printed std::cout &lt;&lt; std::boolalpha &lt;&lt; std::is_aggregate_v&lt;Employee&gt; &lt;&lt; '\n'; // true …

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.