定义常量时包括算术运算
Including arithmetic operations when defining a constant
所以我经常看到这样的东西:
#define gf_PI f32(3.14159265358979323846264338327950288419716939937510)
#define gf_PIhalf f32(3.14159265358979323846264338327950288419716939937510 * 0.5)
这意味着每次我在代码中使用gf_PIhalf时都会计算一半的PI值,对吗?
直接写成1/2不是更好吗?
这样做不是更好吗?
#define gf_PI f32(3.14159265358979323846264338327950288419716939937510)
const float gf_PIHalf = gf_PI * 0.5f; // PIHalf is calculated once
最后,这样做不是更好吗(以及为什么它似乎不是一个常见的做法):
const float gf_PI = 3.14159265358979323846264338327950288419716939937510;
const float gf_PIHalf = gf_PI * 0.5f;
这意味着每次我在代码中使用gf_PIhalf时都会计算一半的PI值,对吗?
不,不太可能。
您可以合理地指望您的编译器在编译时执行乘法,而不是在运行时。
您的结论在某种程度上是正确的,除了#define
版本几乎肯定会在编译时解决,并且关于类型常量全局变量的部分是不常见的实践。它们是现代优秀代码中的常见做法。对于这种用途,#define
几乎是死的。最佳实践是在未命名的命名空间中定义文件作用域全局变量:
namespace
{
const float g_SomeGlobal = 123.456f;
}
这可以防止翻译单元以外的任何人能够"看到"g_SomeGlobal
。
相关文章:
- 算术运算的结果类似于:C浮点变量中的1/3
- 更快的C++算术运算
- 为什么循环体中的一个基本算术运算执行得比两个算术运算慢
- 为什么对无符号字符进行算术运算会将它们提升为有符号整数
- 如何在 C++ 中计算字符串的算术运算
- 复数的算术运算
- 具有非常非常大数字的算术运算
- 如何使用C++中的处理器指令来实现快速算术运算
- boost::spirit::x3 phrase_parse 在进入 Vector 之前进行算术运算
- C++中混合数据类型的算术运算
- C++:编译器是否优化整数 + 浮点算术运算?
- 如何在特征中对二维数组的列执行简单的算术运算
- 使用数字列表和算术运算获取目标数字
- C++:“enable_if”用于限制支持特定算术运算的类型
- 如何正确避免 SIGFPE 和算术运算溢出
- 编译器用于编译 128 位整数的基本算术运算的技巧
- 将临时值存储为某种数据类型时,算术运算的标准规则是什么
- 相同的算术运算在 C++ 和 Python 中给出不同的结果
- 带有空的算术运算
- 定义常量时包括算术运算