【发布时间】:2019-06-22 22:10:31
【问题描述】:
据我所知,std::to_integer<T> 等价于T(value),其中value 是一个类型为std::byte 的变量。
我查看了主要编译器的一些实现,发现在这种情况下,equivalent 的字面意思是 implemented as。换句话说,大多数时候to_integer实际上是这样实现的:
return T(value);
仅此而已。
我不明白这样一个功能的目的是什么?
具有讽刺意味的是,缺点甚至超过了优点。我应该为这样的函数包含一个完整的标头,以避免最有可能直接内联的类 C 类型转换。
还有其他原因吗,或者它只是一个漂亮的类 C 演员的替代品,仅此而已?
【问题讨论】:
-
标题的抱怨是不公平的。如果您使用
std::byte,则该标头已经包含(或者更好!) -
std::to_integer<T>是constexpr,T(value)不一定相同。 -
@SilvanoCerza 它实际上是作为一个返回
T(value)的constexpr 函数实现的。和T(value)有什么区别?我不明白,但这听起来很有趣,如果可能的话,我邀请您在答案中更好地表述这一点。谢谢。 -
我认为这可能与 ADL 有关,但我不确定。
标签: c++ c++17 c++-standard-library