C++20引入了许多新的属性(Attributes),用于为代码提供额外的信息,从而帮助编译器进行更好的优化或实现特定的行为。以下是C++20中一些常见的新属性:
-
[[likely]]和[[unlikely]]:这两个属性用于提示编译器某个分支的执行概率较高或较低,以便进行更好的分支预测和优化。(类似c++11 __builtin_expect 编译器内联函数)
-
[[nodiscard]]:该属性标记函数、方法或类型的返回值,表示调用者应该注意处理返回值,以避免忽略可能的错误或结果。
-
[[no_unique_address]]:此属性告诉编译器结构体或类的成员变量在内存布局上不占用独立的地址空间,从而减少内存开销。
-
[[consteval]]:该属性标记函数,在编译时求值(即常量表达式)上下文中强制执行,并要求其参数和返回值都必须是常量表达式。
-
[[likely_unused]]和[[maybe_unused]]:这两个属性标记变量,用于告诉编译器该变量可能未使用或很可能未使用。它们可以帮助消除未使用变量的警告。
-
[[bit_cast]]:此属性提供了一种类型安全的位级转换方式,用于在底层表示之间进行转换,例如将整数转换为浮点数。
此外,C++20还引入了一些用于模块化编程的属性,如[[module]]、[[import]]和[[export]]等,用于定义模块、导入和导出模块的功能。
需要注意的是,不同的编译器对C++20属性的支持可能有所不同,因此在使用新属性之前,请查阅相关编译器文档以确保兼容性。