c++ - 表达模板化负数字文字的首选方式

标签 c++ templates c++11

虽然有个不错的question关于模板化数字字面量的使用,没有提到数字字面量为负值的情况。

应该首选哪种变体,为什么?

一个

template <typename T>
T expr(T x)
{
    constexpr T scale = T(-9.0);
    return x * scale;
}

B

template <typename T>
T expr(T x)
{
    constexpr T scale = -T(9.0);
    return x * scale;
}

最佳答案

我更喜欢 A 而不是 B。

选项 A 对类型的假设比 B 少,因为一元 - 可能没有为所有类型很好地定义(例如溢出条件等,但它适用于数字文字)。那并且它在眼睛上更容易一些。

当然,问题是针对数值类型的,所以两者都可以。

关于c++ - 表达模板化负数字文字的首选方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33155618/

相关文章:

c++ - 具有构造函数参数的单例

C++ 仅实现模板类

c++ - 分配器专门用于 c++14 中的数组类型?

c++ - 使用 std::sort 进行拓扑排序

c++ - 如何在虚类方法中使用 std::vector::remove()?

c++ - 如何将曲面网格变成多面体?

c++ - 'this' 指针存储在计算机内存中的什么位置?

c++ - 使用迭代器打印 multimap

c++ - 如何将 GCC 诊断编译指示与 C++ 模板函数一起使用?

c++ - 在 C++ 中将 unsetf 与十六进制十进制数和八进制数一起使用