eme*_*gro 5 c c# c++ objective-c
要定义常量,更常见和正确的方法是什么?在编译,链接等方面,使用#define定义常量的成本是多少?这是另一种便宜的方式吗?
Ale*_*tov 14
定义任何const的最佳方法是编写
const int m = 7;
const float pi = 3.1415926f;
const char x = 'F';
Run Code Online (Sandbox Code Playgroud)
使用#define是一种糟糕的c ++风格.隐藏#define在命名空间范围内是不可能的.
相比
#define pi 3.1415926
Run Code Online (Sandbox Code Playgroud)
同
namespace myscope {
const float pi = 3.1415926f;
}
Run Code Online (Sandbox Code Playgroud)
第二种方式显然更好.
编译器本身永远不会看到#define.预处理器在将所有宏传递给编译器之前展开它们.然而,其中一个副作用是重复这些值......两个相同的字符串不一定是完全相同的字符串.如果你说
#define SOME_STRING "Just an example"
Run Code Online (Sandbox Code Playgroud)
每次看到字符串时,编译器都会将字符串的副本添加到输出文件中,这是完全合法的.一个好的编译器可能会消除重复的文字,但这是它必须做的额外工作.如果使用const代替,编译器不必担心这一点.