【发布时间】:2020-08-12 11:05:00
【问题描述】:
你怎么称呼这个操作员?
除了创建自定义文字之外,您可以将它用于其他用途吗?
示例用法:(参见cppreference)
constexpr long double operator"" _deg ( long double deg )
{
return deg * 3.14159265358979323846264L / 180;
}
【问题讨论】:
-
这是一个用户定义的文字操作符。在模块之前将其引入 C++ 的上下文中浪费时间!
-
“除了创建自定义文字之外,您可以将它用于其他用途” - 从您包含的链接中:“[...] 除了限制上面,字面运算符和字面运算符模板是普通函数(和函数模板),它们可以声明为
inline或constexpr,它们可以有内部或外部链接,可以显式调用,可以取地址等." -
我不得不说这是用户定义文字的一个非常糟糕的例子。它让你输入
30_deg,但你得到的是弧度!它使代码撒谎。 -
我不同意。
30_deg仍然代表 30 度,但只是以弧度表示。所以你得到的正是你所承诺的 -
不,你不能拿回学位。你得到一个长双。你写了“deg”,你期望双倍的学位。你将它输入一些 API,然后……崩溃。 API 期望度数,而不是弧度,并且您认为您提供了度数,但这是一个谎言。我猜人们忘记了火星气候轨道飞行器的教训。
标签: c++ operator-overloading user-defined-literals