我看到了这样使用的narrow_cast
代码
int num = narrow_cast<int>(26.72);
cout << num;
问题是我的编译器说:
'narrow_cast' was not decleared in this scope.
我应该定义narrow_cast
自己还是以错误的方式使用它,还是没有类似的东西narrow_cast
?
我看到了这样使用的narrow_cast
代码
int num = narrow_cast<int>(26.72);
cout << num;
问题是我的编译器说:
'narrow_cast' was not decleared in this scope.
我应该定义narrow_cast
自己还是以错误的方式使用它,还是没有类似的东西narrow_cast
?
narrow_cast
gsl 真的是一个static_cast
. 但它更明确,您可以稍后搜索它。您可以自己检查实现:
// 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));
}
narrow_cast
不是标准 C++ 的一部分。您需要gsl来编译和运行它。您可能错过了这一点,这就是它没有编译的原因。
在 Bjarne Stroustrup 的“The C++(11) 编程语言”一书中的“11.5 显式类型转换”一节中,您可以看到它是什么。
基本上,它是一个自制的显式模板化转换函数,在这种情况下可以缩小值并抛出异常时使用,而 static_cast 不会抛出异常。
它对目标类型进行静态转换,然后将结果转换回原始类型。如果你得到相同的值,那么结果是好的。否则,不可能得到原始结果,因此值被缩小丢失信息。
您还可以看到它的一些示例(第 298 和 299 页)。
这个结构可以在第三方库中使用,但据我所知它不属于 C++ 标准。