c++20相关内容

C++20 constexpr 容器将如何工作?

作为 constexpr std::字符串和constexpr std::vector 已被 C++20 接受,这些将如何使用?链接的论文在细节上非常短.我们是否需要指定特殊的 constexpr 分配器,使编译时字符串/向量与其正常等效项不兼容? 解决方案 这两篇论文严重依赖P0784,其中讨论了编译时分配的工作方式. 不完整的答案: 只有 std::allocator 可以 ..
发布时间:2022-01-24 20:49:29 C/C++开发

如何在 g++ 中使用 C++ 20

我正在尝试访问 std::popcount,但它似乎是 仅在 C++ 20 中存在. 当我尝试使用 g++ -std=c++20 main.cpp 进行编译时,它显示 g++: error: unrecognized command line option '-std=c++20';你是说'-std=c++03' 我如何告诉 g++ 使用 c++ 20? 我使用的是 Ubuntu ..
发布时间:2022-01-23 21:13:49 C/C++开发

为什么 constexpr 上下文会使编译器失败,而没有完美优化?

我玩弄了 constexpr 并发现了一些有趣的行为: 在某些情况下,在函数前添加 constexpr 可以使 GCC 尝试更加努力地优化,从而完全优化函数并仅提供计算值.但是,从 constexpr 上下文调用这样一个完全优化的函数会导致错误,因为它在内部使用(编译器内置的)函数/内在函数,这些函数/内在函数未标记为 constexpr(尤其是 memcpy). (Clang 在将 co ..
发布时间:2022-01-23 21:11:11 C/C++开发

如何使用<格式>标题

在相关问题中(“std::string 格式如 sprintf") 我了解了这个很棒的新 C++20 头文件 . 但是,似乎没有支持的编译器.这是正确的还是有办法使用它? 我正在使用带有 -std=c++2a 标志的 g++ 9.3,并且无法识别库 . #include //致命错误:格式:没有这样的文件或目录#include ..
发布时间:2022-01-12 09:37:49 C/C++开发

为什么 range::ostream_iterator 默认可构造?

这个问题是在这里的评论中讨论的. 在 Eric Niebler 的 ranges-v3 库中(有点像是成为C++20 的标准),ranges::ostream_iterator 是 default-constructible - 没有 ostream. 怎么会? 我认为后来有效构造的“虚拟"构造是 C++ 中的一种反模式,我们正在逐渐摆脱它.std::ostream iterat ..
发布时间:2022-01-10 14:46:09 C/C++开发

类模板构造函数在c ++ 20中可以有一个冗余的模板参数列表吗

据我所知,以下代码: template结构体{S ();}; 是格式良好的,即使构造函数声明中的 是多余的. 但是,在 gcc 主干上(但不是在 gcc10.2 上),使用 -std=c++20 会出现错误: error: ')' 标记前的预期非限定 ID3 |S ();^ 代码使用-std=c++20.这是一个错误,还是 C++20 中尚未在所有编译器中实现的重大更改? 解决 ..
发布时间:2021-12-30 15:35:02 C/C++开发

如何在 CMake 中使用 c++20 模块?

Clang 和 MSVC 已经支持 Modules TS 来自未完成的 C++20 标准.我可以使用 CMake 或其他构建系统构建基于模块的项目吗? 我尝试了 build2,它支持模块并且运行良好,但我有一个 问题 关于它的依赖管理(UPD:问题已关闭). 解决方案 CMake 目前不支持 C++20 模块. 另请参阅CMake 问题跟踪器中的相关问题.请注意,与插入新的编译 ..
发布时间:2021-12-26 21:39:10 C/C++开发

通用 lambda 的熟悉模板语法

对于 c++20,建议为通用 lambdas 添加以下语法 p0428r2.pdf auto f = []( T t ) {}; 但是当前在 gcc 8 中的实现不接受以下实例化: f(""); 这是 gcc 中的实现错误还是缺少语言功能?我知道我们谈论的是提案而不是批准的规范. 完整示例(与模板函数语法比较): template void n( T t ) { std::cout ..
发布时间:2021-12-23 22:03:46 C/C++开发

便携式分支预测提示

是否有任何可移植的方式进行分支预测提示?考虑以下示例: if (unlikely_condition) {/* ..一个.. */} 别的 {/* ..B.. */} 这与做有什么不同吗: if (!unlikely_condition) {/* ..B.. */} 别的 {/* ..一个.. */} 或者是使用编译器特定提示的唯一方法?(例如 GCC 上的 __builtin_exp ..
发布时间:2021-12-20 16:22:49 C/C++开发

如何定义递归概念?

cppreference.com 指出: 概念不能递归地引用自己 但是我们如何定义一个概念来表示整数或整数向量,或整数向量的向量等. 我可以拥有这样的东西: 模板 概念 bool IInt0 = std::is_integral_v;模板||需要(类型 tt){{*std::begin(tt)} ->Iint0;};模板||需要(类型 tt){{*s ..
发布时间:2021-12-16 09:10:10 C/C++开发

什么是“跨度"?我什么时候应该使用一个?

最近我收到了在我的代码中使用 span 的建议,或者在使用 span 的网站上看到了一些答案 -据说是某种容器.但是 - 我在 C++17 标准库中找不到类似的东西. 那么这个神秘的 span 是什么?为什么(或何时)使用它是非标准的好主意? 解决方案 是什么? A span 是: 对内存中某处 T 类型的连续值序列的非常轻量级的抽象. 基本上是一个 str ..
发布时间:2021-12-01 15:27:36 C/C++开发

自 C++20 以来是否允许对分配的存储进行指针运算?

在 C++20 标准中,数组类型是隐式生命周期类型. 这是否意味着可以隐式创建非隐式生命周期类型的数组?这种数组的隐式创建不会导致数组元素的创建? 考虑这种情况: //隐式创建std::string数组//但不是 std::string 元素:void * ptr = operator new(sizeof (std::string) * 10);//使用 launder 获取“指向 ..
发布时间:2021-11-18 05:11:53 C/C++开发

在 Windows 上编译为 C++20

我需要一个支持 c++20 的编译器,比如 GCC 10.1(在 linux 上使用),但要在我的 Windows 10 中使用它. 我看到了推荐 Mingw-w64 的帖子,但它支持 c++20 吗? 解决方案 同时 GCC 10 已经发布,MinGW 版本也可用. 您可以从 http://winlibs.com/ 下载带有 GCC 10 的独立构建的 MinGW-w64 ..
发布时间:2021-09-25 20:34:24 C/C++开发