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
    }
}
相关推荐
楼田莉子13 小时前
C++20现代特性:概念与约束
开发语言·c++·后端·学习·c++20
aluluka13 小时前
C++ 20 协程的探索
c++·c++20
君鼎5 天前
内存池完整实现——C++20版
c++20·内存池
普通网友14 天前
记录我适配iOS26遇到的一些问题
c++20
前进吧-程序员14 天前
C++20/23 Ranges:从「迭代器对」到「可组合管道」
c++20
Shan120519 天前
实例分析:C++20的std::jthread
c++20
charlie11451419119 天前
基于开源项目的现代C++工程实践——OnceCallback 前置知识(下):C++20/23 高级特性
c++·开源·c++20
Hical_W19 天前
Hical 踩坑实录五部曲(二):MSVC / GCC / Clang 三平台 C++20 编译差异
linux·windows·经验分享·嵌入式硬件·macos·开源·c++20
Hical_W23 天前
用 Hical + MySQL 5 分钟搭建 CRUD API(C++20 协程版)
数据库·mysql·c++20