C++20中带有约束条件的new

你知道吗?在C++20中,提出了约束与概念的新特性。

我们在 new 时可以对数据类型进行约束,这样我们可以在代码层面更加显示的表示出我们需要操作的类型。

复制代码
#include <concepts>
#include <iostream>

int main() {
    // 约束为一个整形
    auto q1 = new std::integral auto(1);
    // 约束为一个有符号整形
    auto q2 = new std::unsigned_integral auto(1ull);
    // 编译错误,1ull不是一个有符号的整形
    // auto q3 = new std::signed_integral auto(1ull);
}

禁止抛出异常

在 C 语言中使用 malloc 函数,若申请内存失败,则会返回空指针。但在 C++ 中的 new 则是直接抛出异常,若不想有异常,则可以在 new 时指定 std::nothrow。这样在申请失败时候就可以用是否为空来进行判断。

复制代码
#include <new>

int main() {
    int* q = new (std::nothrow) int;
    if (q != nullptr) {
        // success
    } else {
        // error
    }
}
相关推荐
啦啦啦啦啦zzzz2 天前
利用RAII机制进行日志的采集
linux·服务器·c++·网络编程·c++20
啦啦啦啦啦zzzz3 天前
Logger的组装(c++20)
c++·算法·c++20
啦啦啦啦啦zzzz6 天前
Appender抽象类的实现c++20
linux·服务器·c++·c++20
OPEN-F8 天前
C++20新特性精讲:概念、范围与三路比较
算法·c++20
小小龙学IT17 天前
C++ std::chrono 时间库深度解析:从 duration 模板到 C++20 日历与时区
linux·c++·c++20
郝学胜-神的一滴19 天前
C++20 高级编程 004:从初始化、内存到const系列关键字
开发语言·算法·编程·软件构建·c++20
可爱系程序猿19 天前
msvcp120.dll 加载失败排查:VC++ 2013、进程架构与插件私有目录如何对应
程序人生·电脑·c++20
ShineWinsu19 天前
对于C++:C++20中线程、初始化、Lambda与内存视图等特性的解析
c++·c++20
可爱系程序猿20 天前
mfc100.dll 加载失败排查:旧版 VC++ 2010 程序、位数与插件目录如何核对
程序人生·电脑·c++20
ShineWinsu23 天前
对于 C++:C++20中Concept(概念) 与 Coroutine(协程)的解析
linux·开发语言·网络·c++·c++20·epoll