gpt4 book ai didi

c++ - 在编译时或静态分析期间强制执行 std::nothrow

转载 作者:行者123 更新时间:2023-11-30 03:51:57 26 4
gpt4 key购买 nike

是否有可能在编译时或至少在使用 pc-lint 的静态分析期间强制使用 std::nothrow 严格使用运算符 new?使用 c++ (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9) 编译器。

最佳答案

是的,这是可能的。 GCC 支持 error 属性,这使得对特定函数的任何使用都成为硬错误。将此应用于 operator new 具有预期的效果。

#include <cstddef>

void *operator new(std::size_t) __attribute__((error("use new(std::nothrow) instead")));

int main() {
new int;
}

这被编译器拒绝了:

h.cc: In function ‘int main()’:h.cc:6:10: error: call to ‘operator new’ declared with attribute error: use new(std::nothrow) instead   new int;          ^

但是请注意,这仅适用于此自定义声明可见的代码。您可能想要检查您使用的任何库的代码,包括标准库。

关于c++ - 在编译时或静态分析期间强制执行 std::nothrow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30974523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com