【发布时间】:2020-05-12 04:08:35
【问题描述】:
我知道这没有多大意义,因为在堆上选择分配的目的之一是通过变量对象提供元素的数量,但是我可以用宏指定动态分配数组的元素数量吗常数?
喜欢,例如:
int* ptr = new int[SIZE];
用SIZE的宏常量:
#define SIZE 25
我已经用 g++ 对其进行了测试,编译器通过了它,没有错误或警告。但这并不意味着它没有引起任何问题,或者可能是未定义的行为。
- 能否在 C++ 中使用宏常量指定动态分配数组的元素?
【问题讨论】:
-
#define SIZE 25为什么你会使用宏而不是适当的变量,比如constexpr int SIZE = 25;? -
new int [25]有效,因此new int [SIZE]也有效 -
@JesperJuhl 如果情况合适,为什么我不应该?是什么让
constexp int SIZE = 25;比使用宏更好? -
@JesperJuhl 一个用例是
SIZE的值在不同目标平台的构建之间有所不同(将#define SIZE xx放置在条件预处理器指令中)。 -
@RobertS-ReinstateMonica 如果有人决定将名称
SIZE用于任何事物(例如,局部变量或命名空间范围内的变量/函数),您的宏将破坏它。constexpr int SIZE不会发生这种情况(除非新对象在完全相同的范围内声明)。
标签: c++ macros constants new-operator dynamic-memory-allocation