官方已经发布了C++23的修改更新意见!只不过只有草案,还没有实装进标准官方文档中。不过快了,整理好之后马上就会有了。
先看几个简单的:
#elifdef
、#elifndef
(C++23 起) 与 #endif
指令所控制。
语法:
#if 表达式
#ifdef 标识符
#ifndef 标识符
#elif 表达式
#elifdef 标识符 (C++23 起)
#elifndef 标识符 (C++23 起)
#else
#endif
cpp23之后 对语言上的修改就一个,宏定义预处理方法。多了#elifdef,#elifndef 这两个。用法就是上面这个样子,等价下面我们写的这样。
#if SOMEMACRO > 10
#elifdef SOMEOTHERMACRO
// 等价于#elif defined(SOMEOTHERMACRO)
#elifndef SOMEOTHERMACRO2
// 等价于to #elif !defined(SOMEOTHERMACRO2)
#endif
官网对 #elifdef与#elifndef的解释 30年的变革多了两个宏定义处理,很棒!还有一#warning
诊断消息 意思就是只是警告,不停止继续编译(就不拿出来解释了)。
//#if和指令测试指定的条件(见下文),如果计算结果为 true,则编译受控代码块。在这种情况下,后续的、#elifdef、#elifndef(自 C++23 起)和指令将被忽略。
//否则,如果指定的条件计算结果为 false,则跳过受控代码块,并处理后续的 、
//#elifdef #elifndef(自 C++23 起)或指令(如果有)。如果后续指令为 ,则无条件编译由该指令控制的代码块。否则,、
//#elifdef 或 #elifndef(自 C++23 起)指令就像指令一样:检查条件,根据结果编译或跳过受控代码块,在后一种情况下处理后续、
//#elifdef #elifndef(自 C++23 起)和指令。条件预处理块由指令终止。
值得的注意的是,每版语言的修改的更多的是适用于标准库,平常的使用中几乎不太可能会用到。具体的实装,还要等上一两年左右后,所以的系统适配更新后,才可以。毕竟,就如今现在国内的情况,大部分人还停留C++11。因为c++11中的新特性已经足够了,很多也用不到。最新的pc端也才实装到c++17,所以这是一篇看似很遥远的文章。不过,标准会的人却已经开始筹备2026年cpp计划的中的修改意见了。不管那么多了。如今的Cpp已经成为最冷门的语言了,谁还学的动呢。下一个。
新增标准库
23之后又新增了这么多的标准库。每个都有自己独特的功能。简单说下我看到<print>,时隔多年,c++自己的<print>要来了。今年标准会破天荒的优化了输入输出流,说是节约了2倍的内存空间,提升了7%的效率。对字符进行了各种性能上的优化。
头文件更改
值得注意的是23以后的输入输出流头文件,可能会变成如下这样子:
import std;
int main()
{
std::println("Hello World!");
}
这算是对python语言的一种学习,使头文件变的足够简介。以后可能会越来越短,不过那得到26年以后的事情了。23以后也引入了新的编码方式,编程思想可能会和以前大大不同。
浮点型<stdfloat>
浮点型在23中进行了重新优化,增大的扩容性。64,128位,不管是以后的机器学习还是什么方面的考虑,进行了进一步的扩容,增大。
栈追踪 诊断库basic_stacktrace
用于一个对堆栈进行追踪的调试库。
内存管理上
多了下面四个指针,以及一些内存效率上的优化。
内存分配器
新增了如下的这个两个分配器
垃圾回收机制删除
这里值得注意的点 c++11中的垃圾回收机制,在cpp23中被删除了。这个不提,可能也会有多少人知道。 但, 还是很需要注意到。
容器库
大致就是我们上面看到的那一个 <mdspan>,说实话<span>(cpp20库),都没曾用过,就别提这个了。
大致上有简单的一些就这些,其余的不再往下看了,等以后更新了,在继续完成下去。