C++ 窄带演员做什么?
我看到一个代码使用了这样的C++ 窄带演员做什么?,c++,guideline-support-library,C++,Guideline Support Library,我看到一个代码使用了这样的窄播 int num = narrow_cast<int>(26.72); cout << num; 我应该自己定义窄播吗,还是我用了错误的方法,还是没有类似的窄播 gsl的狭窄演员阵容实际上是一个静态演员阵容。但它更明确,您可以稍后搜索它。您可以自己检查以下各项: // narrow_cast(): a searchable way to do narrowing casts of values template <class T, c
窄播
int num = narrow_cast<int>(26.72);
cout << num;
我应该自己定义
窄播
吗,还是我用了错误的方法,还是没有类似的窄播
gsl的狭窄演员阵容实际上是一个静态演员阵容。但它更明确,您可以稍后搜索它。您可以自己检查以下各项:
// narrow_cast(): a searchable way to do narrowing casts of values
template <class T, class U>
GSL_SUPPRESS(type.1) // NO-FORMAT: attribute
constexpr T narrow_cast(U&& u) noexcept
{
return static_cast<T>(std::forward<U>(u));
}
//shown_cast():一种可搜索的方法,用于对值进行缩小强制转换
模板
GSL_SUPPRESS(type.1)//无格式:属性
constexpr T狭窄型(U&U)无例外
{
返回静态_cast(std::forward(u));
}
<代码> SimulasCase不是标准C++的一部分。您需要编译并运行这个。您可能没有注意到这一点,这就是它没有编译的原因。
在Bjarne Stroustrup的《C++(11)编程语言》一书的“11.5显式类型转换”一节中,您可以看到它是什么 基本上,它是一个自制的显式模板化转换函数,在这种情况下,当值可能被缩小时会抛出异常,而静态_cast不会抛出异常 它对目标类型进行静态转换,然后将结果转换回原始类型。如果得到相同的值,则结果是正常的。否则,就不可能得到原始结果,因此该值会缩小,从而丢失信息 您还可以看到一些示例(第298和299页)此构造可用于第三方库,但据我所知,它不属于C++标准。
搜索关键词:“SimulasCaseC++”,第三个链接:谢谢,但如果您只告诉我它是什么,它会非常有用。// narrow_cast(): a searchable way to do narrowing casts of values
template <class T, class U>
GSL_SUPPRESS(type.1) // NO-FORMAT: attribute
constexpr T narrow_cast(U&& u) noexcept
{
return static_cast<T>(std::forward<U>(u));
}