尽管关于模板化数字文字的使用有一个很好的question,但它没有提到数字文字是负值时的情况。
应该首选哪种变体?为什么?
A
template <typename T>
T expr(T x)
{
constexpr T scale = T(-9.0);
return x * scale;
}
乙
template <typename T>
T expr(T x)
{
constexpr T scale = -T(9.0);
return x * scale;
}
答案 0 :(得分:6)
我赞成A超过B.
选项A假设类型不是B,因为一元<input type="text" ng-model="city.name" class="form-control" ng-disabled="!country.name" name="name">
<input type="text" ng-model="country.name" class="form-control">
可能没有为所有类型定义好(例如溢出条件等,但对数字文字来说很好)。这对眼睛来说更容易一些。
当然,问题是数字类型,所以要么就好了。
答案 1 :(得分:4)
假设您只讨论算术类型(否则operator-
可能会重载以做一些奇怪的事情)......
它们对所有算术类型产生相同的结果,除了最负值(见下文),但 A 更常规,不太可能混淆人。仅此一点就足以让我更喜欢 A 。
A 可用于该类型的整个值范围,但 B 不能例如。
short a = short(-32768);
assert( a == -32768 );
short b = -short(32768);
assert( b == -32768 ); // FAIL!
这是因为32768不是简短的有效值,因此无法通过否定(short)-32768
来生成值(short)32768
。