Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11 在自由函数上使用熟的用户定义文字有什么原因?_C++11 - Fatal编程技术网

C++11 在自由函数上使用熟的用户定义文字有什么原因?

C++11 在自由函数上使用熟的用户定义文字有什么原因?,c++11,C++11,与免费函数相比,我看不出使用用户定义的文字有什么好处。后者在语法上可能更好,但我看到了一些问题: 为了避免常用命名文字之间的冲突,您可能需要使用特定的作用域和using namespace指令,因为您不能限定文字 对于整数和浮点类型,需要使用最宽的参数 第一点可能特别令人讨厌,因为它要求您在发生冲突时以某种方式构造代码。这也意味着在头文件中使用文本可能是个坏主意。例如,执行以下操作需要引入命名空间: // Thing.h using namespace unit_literals; cla

与免费函数相比,我看不出使用用户定义的文字有什么好处。后者在语法上可能更好,但我看到了一些问题:

  • 为了避免常用命名文字之间的冲突,您可能需要使用特定的作用域和
    using namespace
    指令,因为您不能限定文字
  • 对于整数和浮点类型,需要使用最宽的参数
第一点可能特别令人讨厌,因为它要求您在发生冲突时以某种方式构造代码。这也意味着在头文件中使用文本可能是个坏主意。例如,执行以下操作需要引入命名空间:

// Thing.h
using namespace unit_literals;

class Thing {
    Property<Dimension> length{5.0_cm};
};
//Thing.h
使用名称空间单位文字;
阶级事务{
属性长度{5.0_cm};
};
使用自由函数,您可以在发生碰撞时进行限定

// Thing.h

class Thing {
    Property<Dimension> length{units::cm(5.0)};
};
//Thing.h
阶级事务{
属性长度{units::cm(5.0)};
};
使用自由函数还可以避免为浮点和整数类型写入用户定义的文字:

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

Property<Dimension> length{units::cm(5.0)}; // ok
Property<Dimension> length{units::cm(5)}; // ok
维度cm(浮动){return…;}
属性长度{units::cm(5.0)};//好啊
属性长度{units::cm(5)};//好啊

与自由函数相比,有什么理由更喜欢使用熟的用户定义文本?

注意
使用名称空间
仅限于它所使用的范围,因此如果您能够很好地找到它,那么在标头中使用它可能不会太糟糕。至于你剩下的问题,我帮不了你……:)注意
使用名称空间
仅限于它所使用的范围,因此如果您能够很好地找到它,那么在标头中使用它可能不会太糟糕。至于你剩下的问题,我帮不了你……:)