"inline"、"constexpr"或"noexcept"
`inline`, `constexpr` or `noexcept` for declaration only functions
对于没有主体的函数,仅用于类型检查目的或未计算的上下文,是否有任何机会将此类函数标记为inline
,noexcept
或constexpr
?例如:
namespace _detail {
template<class R, class T, class... Params>
constexpr R result_type(R(T::*)(Params...)) noexcept;
template<class R, class T, class... Params>
constexpr R result_type(R(T::*)(Params...) const) noexcept;
template<class R, class... Params>
constexpr R result_type(R(*)(Params...)) noexcept;
template<class R, class... Params>
constexpr R result_type(R(&)(Params...)) noexcept;
}
template<class F>
struct result_type { typedef decltype(_detail::result_type(declval<F>())) type; }
这些constexpr
或noexcept
在任何意义上是否意味着什么或有任何影响? 我想它甚至可能具有误导性,因为用户可以理解这些功能可能在其他地方有定义。无论如何,是否有任何命名约定来标记这些函数仅用于非计算上下文,或者其目的只是计算类型?
noexcept
肯定会有所作为,因为您可以在未计算的noexcept
上下文中使用这些函数。
inline
无关紧要。只影响实现的联动,没有实现。
我认为constexpr
应该没有什么区别,因为没有标准方法来检测未计算的表达式是否是常量表达式。但是可能有特定于编译器的方法。
相关文章:
- 在noexcept 规范中是否允许使用"this"?
- 使用 noexcept 运算符 depenendet
- NOEXCEPT 函数调用运算符的说明符_Not_fn
- 参数包内 noexcept 说明符
- 当 noexcept 函数尝试在 gcc 或 clang 中调用非 noexcept 函数时启用警告
- 为什么使用 std::vector 的代码不能编译,但使用 std::unique_ptr 如果没有 noexcept
- 我如何静态断言static_cast是 noexcept?
- "noexcept-expression 由于对......的调用而计算为'假'"是什么意思?
- 如何为C++函数指定 noexcept ?
- 如何知道函数何时抛出以及何时使用noexcept
- 添加noexcept是否会破坏二进制兼容性
- noexcept未通过衰变去除
- 为什么旧的空抛规范被用新的语法"noexcept"重写?
- 在模板中使用 noexcept 运算符
- 'char (*RtlpNumberOf(T (&)[N]))[N]':无法从"char *"
- Arduino IDE 错误 - 无法找到数字文字运算符"运算符""f900ff"
- 在 vs2012 中,lambda 中的 noexcept 如何工作?
- "inline"、"constexpr"或"noexcept"
- "非静态数据成员之前需要构造函数" - 我是否使用"boost::variant"
- 递归 noexcept() 的含义是什么?