我目前正在开发自己的数学库,以提高我的C++技能。我偶然发现了boost常量头文件,我想知道使用编译时常量与运行时声明常量有什么区别?
const float root_two = 1.414213562373095048801688724209698078e+00;
const float root_two = std::sqrt( 2.0f );
在使用固定的编译时常量进行计算并在运行应用程序时使用函数时,是否会引入错误?如果使用运行时常量,那么这个错误就会被忽略吗?
我目前正在开发自己的数学库,以提高我的C++技能。我偶然发现了boost常量头文件,我想知道使用编译时常量与运行时声明常量有什么区别?
const float root_two = 1.414213562373095048801688724209698078e+00;
const float root_two = std::sqrt( 2.0f );
在使用固定的编译时常量进行计算并在运行应用程序时使用函数时,是否会引入错误?如果使用运行时常量,那么这个错误就会被忽略吗?
正如HansPassant所说,这可能会为您节省微瓦。但请注意,编译器有时会通过在编译期间计算表达式并替换成字面值来优化代码。关于此问题,请参见我之前提出的问题的答案。
使用固定的编译时常量是否会引入错误?如果您正在使用任意精度数据类型,则可能会。但是,使用像double
这样的普通数据类型更有效,并且这些数据类型仅限于大约16个十进制数字的精度。
根据(2),您的第二个初始化不会比第一个更精确。实际上,如果您使用任意精度计算器预先计算了平方根的值,则字面值甚至可能会更加准确。
const
访问? - πάντα ῥεῖ