我可以使用 new 指定具有宏常量的动态分配数组的元素吗?
Can I specify the elements of a dynamically allocated array with a macro constant by using new?
我知道这没有多大意义,因为在堆上选择分配的目的之一是通过变量对象提供元素数,但是我可以指定动态分配数组的元素数吗宏常量?
喜欢,f.e.:
int* ptr = new int[SIZE];
用宏常量SIZE
:
#define SIZE 25
我已经用 g++ 测试了它,编译器通过了它,没有错误或警告。但这并不意味着它没有引起任何问题或者可能是未定义的行为。
- 我可以在 C++ 中使用宏常量指定动态分配数组的元素吗?
Can I specify the elements of a dynamically allocated array with a
macro constant in C++?
简答:是的!
原因:使用 #define
指令指定的宏被评估,并且 被评估值 替换,由 预处理器 - 即 在 实际编译器开始处理代码之前。因此,给定您的(前一个)#define SIZE 25
行,代码:
int* ptr = new int[SIZE];
对于编译器来说,完全等同于:
int* ptr = new int[25];
事实上,宏的这种用法很常见 - 例如,在必须为不同平台构建的代码中,SIZE
的值在不同构建之间会有所不同。例如,可以 有条件地 定义 SIZE
如下:
#ifdef PLATFORM25
#define SIZE 25
#else
#define SIZE 50
#endif
或者,甚至可以使用编译器命令行选项定义 SIZE
宏 - 类似于(取决于编译器)的开关:
/DSIZE=25
我知道这没有多大意义,因为在堆上选择分配的目的之一是通过变量对象提供元素数,但是我可以指定动态分配数组的元素数吗宏常量?
喜欢,f.e.:
int* ptr = new int[SIZE];
用宏常量SIZE
:
#define SIZE 25
我已经用 g++ 测试了它,编译器通过了它,没有错误或警告。但这并不意味着它没有引起任何问题或者可能是未定义的行为。
- 我可以在 C++ 中使用宏常量指定动态分配数组的元素吗?
Can I specify the elements of a dynamically allocated array with a macro constant in C++?
简答:是的!
原因:使用 #define
指令指定的宏被评估,并且 被评估值 替换,由 预处理器 - 即 在 实际编译器开始处理代码之前。因此,给定您的(前一个)#define SIZE 25
行,代码:
int* ptr = new int[SIZE];
对于编译器来说,完全等同于:
int* ptr = new int[25];
事实上,宏的这种用法很常见 - 例如,在必须为不同平台构建的代码中,SIZE
的值在不同构建之间会有所不同。例如,可以 有条件地 定义 SIZE
如下:
#ifdef PLATFORM25
#define SIZE 25
#else
#define SIZE 50
#endif
或者,甚至可以使用编译器命令行选项定义 SIZE
宏 - 类似于(取决于编译器)的开关:
/DSIZE=25