gpt4 book ai didi

c++ - g++ 6.2 的不同异常说明符

转载 作者:可可西里 更新时间:2023-11-01 16:39:17 24 4
gpt4 key购买 nike

有人能给我解释一下为什么这段代码不能用 g++ 版本 6.2.0 编译,但是可以用 clang++ 版本 3.9.0-svn274438-1 和 icpc 版本 16.0.2 编译吗

$ cat wtf.cpp
#include <cstdio>
#include <new>
void *operator new(std::size_t) throw(std::bad_alloc);
void *operator new(std::size_t) throw (std::bad_alloc) { void *p; return p; }

$ g++-6 wtf.cpp -c
wtf.cpp: In function ‘void* operator new(std::size_t)’:
wtf.cpp:4:7: error: declaration of ‘void* operator new(std::size_t) throw (std::bad_alloc)’ has a different exception specifier
void *operator new(std::size_t) throw (std::bad_alloc) { void * p; return p; }
^~~~~~~~
wtf.cpp:3:7: note: from previous declaration ‘void* operator new(std::size_t)’
void *operator new(std::size_t) throw(std::bad_alloc);

最佳答案

您使用的是 C++11 或更高版本吗?

C++98 中原始的 operator new() 声明

throwing:   
void* operator new (std::size_t size) throw (std::bad_alloc);

nothrow:
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw();

placement:
void* operator new (std::size_t size, void* ptr) throw();

已在 C++11 中更改为使用 noexcept 关键字:

throwing:   
void* operator new (std::size_t size);

nothrow:
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;

placement:
void* operator new (std::size_t size, void* ptr) noexcept;

Reference link.

关于c++ - g++ 6.2 的不同异常说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39188919/

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