C++ 避免现代C+中某些数量的平方(或n次方根等)的类型混淆+;

C++ 避免现代C+中某些数量的平方(或n次方根等)的类型混淆+;,c++,C++,在其介绍之后,立即从哲学主张开始,即一个人应该“直接用代码表达想法”。这听起来是个好主意,直到我想到这个: Speed s; // there will be one single value std::vector<Mass> m; // there may be millions/billions of values ComputeTotalKineticEnergy(); 速度s;//只有一个值 std::向量m;//可能有数百万/数十

在其介绍之后,立即从哲学主张开始,即一个人应该“直接用代码表达想法”。这听起来是个好主意,直到我想到这个:

Speed s;                 // there will be one single value
std::vector<Mass> m;     // there may be millions/billions of values
ComputeTotalKineticEnergy();
速度s;//只有一个值
std::向量m;//可能有数百万/数十亿的价值
ComputeTotalkineCenergy();

如果有很多质量,并且正常的“半em v平方”物理定律适用,那么将(隐含的,必要的)循环外的速度平方到质量矢量上是有意义的。但是
速度s
变量的平方是什么类型?“直接在代码中”表达想法的概念是否会在您想要计算对数、n次根或类似值时导致问题?在这种情况下,我们可以定义一种(丑陋的)类型的
SpeedSquared
,但是对于
Speed
的函数和
std::chrono::high\u resolution\u clock::time\u point
,同样适用于
Speed
的一般原则是什么,或者编写自己的单元库


否则,在进行动能计算时,只需将
速度
质量
值转换为实数,然后将得到的实数转换为
能量
值或其他值。在计算的一个小小的中间阶段没有使用“适当的”类型,这没什么大不了的。

平方时间点意味着什么。而且我认为你把这个理解得太字面了,它听起来更像是一个指导方针而不是一个规则。我不确定是否有一个“一般原则”。最重要的是,程序员必须是一个务实的人,并且只有在有意义的时候才遵循规则/指导方针。如果你太过严格地遵循斯特劳斯特鲁普的规则(我总是要查他的名字怎么拼),而不去问你为什么要遵循这些规则,只会把你带进货运狂热编程的深渊。如果你有两个质量以相同的速度运动,那么它们的组合动能是m1*v*v/2+m2*v*v/2(物理学)这等于
(m1+m2)*v*v/2
(数学)。这就是你想“直接用代码表达”的“想法”,没有“一般原则”。我认为数据类型的定义取决于您的“域模型”。@M.M Oops-我想我指的是
std::chrono::duration
,但实际上我只是在寻找一些长而复杂的东西。但同意-它们是指导方针。。。但这仍然意味着他们在那里寻求指导。因此,剩下的问题是如何解决速度平方的问题——是否应该费心定义
速度
类型。。。或者只使用
双精度
,这些指南明确指出这是一种不良做法。如果有一个一般的原则,我想知道它是什么。为了阐明,Boo.SUN理解SI类型系统并将其映射到C++类型系统。物理学对速度平方没有任何问题,它只是一个单位为m^2/s^2或J/kg的量。类似地,Boost.Units理解将一个量平方会使其单位指数翻倍。