琐碎的解决方案是:
class Number
{
public:
bool isFinite();
bool isPositive();
double value();
...
private:
double value_;
bool isFinite_;
bool isPositive_;
...
};
Run Code Online (Sandbox Code Playgroud)
让我担心的是效率:
从Effective C++:55改进程序和设计的具体方法(第3版)作者:Scott Meyers:
即使小对象具有廉价的拷贝构造器,也可能存在性能问题.有些编译器会以不同的方式处理内置和用户定义的类型,即使它们具有相同的底层表示.例如,一些编译器拒绝将仅由双精度组成的对象放入寄存器中,即使他们乐意定期将裸露的双精度放在那里.当发生这种情况时,你最好通过引用传递这些对象,因为编译器肯定会将指针(引用的实现)放入寄存器中.
有没有办法绕过效率问题?例如,使用某种汇编语言魔法的库?
没有理由为double实现Number类.double格式已经将Infinity,NaN和signage实现为raw basic double类型的一部分.
其次,您应首先编写代码以确保正确性,然后再尝试优化,此时您可以查看特定数据结构的因素并重写代码和算法.
现代编译器在编写优秀代码时通常非常有效,并且通常比大多数人类程序员做得更好.
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |