使用熟用户定义的文字而不是自由函数的原因是什么?

时间:2015-09-21 15:43:15

标签: c++11

与免费功能相比,使用熟用户定义的文字并没有太大的好处。后者在语法方面可能更好,但我看到一些问题:

  • 为了避免通常命名的文字之间的冲突,您可能需要使用具有using namespace指令的特定范围,因为您无法限定文字
  • 您需要对整数和浮点类型使用最宽的参数

第一点可能特别烦人,因为它要求您在遇到冲突时以某种方式构建代码。这也意味着在头文件中使用文字可能是个坏主意。例如,执行以下操作需要您引入命名空间:

// Thing.h
using namespace unit_literals;

class Thing {
    Property<Dimension> length{5.0_cm};
};

使用免费功能,您可以在发生碰撞时获得资格。

// Thing.h

class Thing {
    Property<Dimension> length{units::cm(5.0)};
};

使用自由函数还可以避免为浮点和整数类型编写用户定义的文字:

Dimension cm(float in) { return ...; }

Property<Dimension> length{units::cm(5.0)}; // ok
Property<Dimension> length{units::cm(5)}; // ok

有哪些理由更喜欢使用熟用户定义的文字而不是自由函数?

0 个答案:

没有答案