gpt4 book ai didi

c++ - ˋtypedefˋ 中的异常规范是完全禁止的还是仅在顶层?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:22:49 25 4
gpt4 key购买 nike

在 C++14 Sec 15.4;2 中声明,......异常规范不应出现在 typedef 声明或别名声明中。

这意味着以下内容是被禁止的:

typedef void (*fn)(int) noexcept;

但是 shall not appear 是否意味着标记 noexcept 不能出现在 typedef 声明中的任何地方?

例如,这两者是否也被禁止?

typedef void (*fn1)(void (*)(int) noexcept);
typedef decltype(std::declval<void (*)(int)noexcept>()) fn2;

这两个都试图定义一个类型 fn1fn2 能够指向一个函数,该函数接受一个函数的指针,该函数接受一个 int 并且不返回任何内容,同时 promise 永远不会抛出异常。

因此在我的示例中,异常规范未应用于顶层类型 fn1 resp。 fn2typedef 引入但这些函数可能接收的参数。

那么我应该逐字记录 15.4;2,这样我的两个例子都无效吗?还是只禁止应用于类型定义而我的示例是正确的?

最佳答案

这就是全部。

引用 C++11 和 C++14 中 [except.spec]/p2 的完整措辞:

An exception-specification shall appear only on a function declarator for a function type, pointer to function type, reference to function type, or pointer to member function type that is the top-level type of a declaration or definition, or on such a type appearing as a parameter or return type in a function declarator. An exception-specification shall not appear in a typedef declaration or alias-declaration.

也许还不完全清楚,但我认为这已经足够了:您可以在函数声明中使用异常规范,包括在函数声明的参数或返回类型中……但不能在别名声明中使用。

这种写法在C++17中已经被完全移除; noexcept is part of the type system now .

关于c++ - ˋtypedefˋ 中的异常规范是完全禁止的还是仅在顶层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54426508/

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