c++20相关内容

为什么C++20不支持无序的指定初始值设定项?

当我阅读C++ reference时,我对这一段有一个问题: 注意:无序指定初始化,嵌套指定 初始化、指定的初始值设定项和规则的混合 初始化式,数组的指定初始化都是 在C编程语言中支持,但在C++中不允许。 是否存在阻止C++支持无序指定初始化的技术原因? 推荐答案 是的,其基本原理已在附件C(参考资料)中介绍 兼容性具体[diff.dcl]p10(重点挖掘): 受影 ..
发布时间:2022-05-16 18:13:37 C/C++开发

[[可能]]和[[不太可能]]影响程序汇编的简单示例?

C++20向该语言引入了[[likely]]和[[unlikely]]属性,这些属性可用于允许编译器针对以下情况进行优化:一条执行路径比另一条执行路径更可能或更不可能。 考虑到不正确的分支预测的代价,这似乎是一个在代码的性能关键部分非常有用的功能,但我不知道它实际上会导致编译器做什么。 有没有一段简单的代码,添加[[likely]]和[[unlikely]]属性会更改编译器的程序集输出 ..
发布时间:2022-05-16 18:07:28 C/C++开发

什么是C++模块权限?

我在C++模块的上下文中看到一些对术语“权限”的引用,例如https://gcc.gnu.org/wiki/cxx-modules: Baz (); // Baz's declaration visible from purview Quux interface 什么是C++模块权限? 推荐答案 我们把这个问题分成三个部分: 什么是C++模块? 什么是权限? C++ ..
发布时间:2022-05-16 17:56:22 C/C++开发

将clang格式与c++20概念结合使用

我研究了clang-Format样式选项https://clang.llvm.org/docs/ClangFormatStyleOptions.html,但没有看到任何与c++概念和REQUIRED子句的引用。通常我可以配置clang-Format来做我想做的事情,但我想不出如何让它很好地处理我的概念和要求子句: 当前clang-Format对我的概念做了这样的处理: template ..
发布时间:2022-05-16 17:33:30 其他开发

C++20[[NO_UNIQUE_ADDRESS]]中的新功能是什么?

我已经读了好几遍C++20的新特性no_unique_address,我希望有谁能从C++参考中用一个比下面这个例子更好的例子来解释和说明。 解释适用于在 不是位字段的非静态数据成员。 表示此数据成员的地址不需要不同于 其类的所有其他非静态数据成员。这意味着如果 成员具有空类型(例如无状态分配器),则编译器可以 将其优化为不占用任何空间,就像它是一个空基地一样。如果 该成员不是空的,其中的 ..
发布时间:2022-05-16 17:24:08 C/C++开发

非类型模板参数专门化

我和GCC一起编译时,它需要设置Switch(A),而msvc和Clang找不到MyType专门化,反之亦然。谁是对的? template struct sized_t2 { // static constexpr std::size_t size = col_size; // static constexpr ..
发布时间:2022-05-16 17:11:18 C/C++开发

C++20模块“循环依赖”

我正在尝试将一个模块包括在另一个模块中,但由于以下错误而无法编译: ";无法生成以下源文件,因为它们之间存在循环依赖关系:module1.ixx依赖于module2.ixx。"; 我想要modClass1_CONTAINE modClass2_CLASS和modClass2_CONTAINE指向静态modClass1_的指针。 我尝试使用C++17头文件和源文件( ..
发布时间:2022-05-16 17:01:33 C/C++开发

用于检查容器类中是否存在函数和隐式演绎规则的C++概念

我正在尝试解决一些在概念和模板类型(如std::VECTOR)方面对我来说似乎很棘手的事情。 我正在尝试应用编译时间约束,类似于我在T上使用std::move的方式,但在C上使用PushBackMoovable时。它与函数Decl末尾的Requires一起工作,但我希望保持一致,并将我的约束放在模板args中。我试着用“PushBackMoovable C”替换“C类”,但失败得不是很严重, ..

结构成员的概念检查

检查特定结构成员是否验证给定概念的简单惯用方法是什么? 我尝试了以下方法,但不起作用,因为{ T::f }生成类型float&: #include struct foo { float f; }; // ok static_assert(std::floating_point); template ..
发布时间:2022-05-16 16:40:12 C/C++开发

使用概念检查属性类型

我想检查结构/类的属性是否符合我的概念需求,但编译器抱怨。 示例: struct N { char value; auto Get() { return value; } }; struct M { int value; auto Get() { return value; } }; void func3( auto n ) requires ..
发布时间:2022-05-16 16:32:16 C/C++开发

为什么调用主函数被认为是未定义的行为(UB)

恐怕这又是一个关于解释ISO/IEC 14882(C++标准)的问题,但是: 从程序调用main,例如从main递归调用main()至少不是实现定义的行为吗?(更新:我暗示稍后未定义格式错误的未实现,也未定义UB,请参阅下文并回答) 6.9.3.1[basic.start.main]状态 3函数Main不得在程序内使用。Main的链接(6.6)由实现定义... consensus似 ..
发布时间:2022-05-16 16:21:31 C/C++开发

C++20概念来检查类似元组的类型

我想为类似元组的类型创建一个概念。类似元组的类型将像std::pair、std::tuple和std::array一样,提供编译时已知数量的类型,可通过编译时索引的get函数访问。 我对概念还很陌生,我不知道从哪里开始。遗憾的是,头中似乎没有这样的概念。 例如,我可以写: template concept tuple_lik ..
发布时间:2022-05-16 16:03:05 C/C++开发

生成器在C++20视图管道中调用了两次

在views适配器的简单管道中,有gen函数被调用以生成值序列(使用内部状态),然后对其进行筛选。 令人惊讶和违反直觉(至少对我来说)的是,生成器函数在每次迭代中被调用两次,因此对同一筛选器的下一次检查失败(筛选的值不会在管道中重复使用)。 您知道这是否是正确的预期行为(以及为什么)? 在GCC 10.3、11.1和干线(code)中使用libstdc++测试,和range-v3 ..
发布时间:2022-05-16 15:57:50 C/C++开发