作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
取自 type_traits
的 GCC 实现为什么是 static_cast
这里需要吗?
template <typename _Tp, typename... _Args>
struct __is_nt_constructible_impl
: public integral_constant<bool, noexcept(_Tp(declval<_Args>()...))> {};
template <typename _Tp, typename _Arg>
struct __is_nt_constructible_impl<_Tp, _Arg>
: public integral_constant<bool,
// Why is `static_cast` needed here?
noexcept(static_cast<_Tp>(declval<_Arg>()))> {};
最佳答案
如果发明的变量声明,则类型不能从参数列表构造
T t(declval<Args>()...);
T(declval<Args>()...)
T(declval<Args>())
被视为
cast-expression ,它可以调用
const_cast
and reinterpret_cast
;显式使用
static_cast
恢复与申报表的等效性。
struct D;
struct B { operator D&&() const; };
struct D : B {};
static_cast
来自
B const
至
D&&
必须使用转换运算符,但强制转换表达式可以绕过转换运算符,因此 noexcept 也是如此。所以省略了
static_cast
is_nothrow_constructible<D&&, B const>
会给出错误的结果.
关于c++ - 为什么在 gcc 的 is_nothrow_constructible 实现中需要 static_cast?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59627535/
考虑以下两个示例: struct A { A () noexcept = default; }; struct B : A { B () noexcept = default;
取自 type_traits 的 GCC 实现为什么是 static_cast这里需要吗? template struct __is_nt_constructible_impl : publ
我是一名优秀的程序员,十分优秀!