我正在阅读CppCoreGuidelines的哲学部分,发现了一个我不理解的例子。(https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-philosophy)
代码示例如下;
代码示例如下;
change_speed(double s); // bad: what does s signify?
// ...
change_speed(2.3);
change_speed(Speed s); // better: the meaning of s is specified
// ...
change_speed(2.3); // error: no unit
change_speed(23m / 10s); // meters per second
我的问题与最后一行有关。我假设指南建议像这样定义Speed;
typedef int Speed;
但在示例的最后一行中,它们使用了m和s作为参数的一部分。如果我尝试相同的操作,只会出现错误提示:"找不到用户定义的字面值操作符"。
这个应该怎么工作?
double
更好。虽然它可能使您的代码更易读(有人可能这么认为),但在类型安全方面它并没有增加任何内容,您仍然可以传递2.3
。只有使用显式构造函数的类Speed
才能添加类型安全性。 - StoryTeller - Unslander Monica23_m
和10_s
。对于用户定义字面量,你尝试过在搜索引擎中输入这个术语吗? - Yakk - Adam NevraumontSpeed
是如何定义的,我猜我们应该通过倒数第二行的错误来确定它是一个类。 - Barmarstd :: chrono
也做了类似的事情。 - StoryTeller - Unslander Monicam
除以s
可能会被重载以返回一个普通的 double,但这种情况不太可能)。 - StoryTeller - Unslander Monica