Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我是否可以使用new指定动态分配的数组的元素以及宏常量?_C++_Macros_Constants_New Operator_Dynamic Memory Allocation - Fatal编程技术网

C++ 我是否可以使用new指定动态分配的数组的元素以及宏常量?

C++ 我是否可以使用new指定动态分配的数组的元素以及宏常量?,c++,macros,constants,new-operator,dynamic-memory-allocation,C++,Macros,Constants,New Operator,Dynamic Memory Allocation,我知道这没有多大意义,因为在堆上选择分配的目的之一是通过变量对象提供元素数,但是我可以用宏常量指定动态分配数组的元素数吗 比如,f.e.: int* ptr = new int[SIZE]; 宏常量为SIZE: #define SIZE 25 我已经用g++对它进行了测试,编译器在没有错误或警告的情况下通过了测试。但这并不意味着它没有引起任何问题,或者可能是未定义的行为 < L>可以用C++中的宏常量指定动态分配数组的元素吗? 我可以用 C++中的宏常量? 简短回答:是的 原因:使用#

我知道这没有多大意义,因为在堆上选择分配的目的之一是通过变量对象提供元素数,但是我可以用宏常量指定动态分配数组的元素数吗

比如,f.e.:

int* ptr = new int[SIZE];
宏常量为
SIZE

#define SIZE 25

我已经用g++对它进行了测试,编译器在没有错误或警告的情况下通过了测试。但这并不意味着它没有引起任何问题,或者可能是未定义的行为

    < L>可以用C++中的宏常量指定动态分配数组的元素吗?
我可以用 C++中的宏常量? 简短回答:是的

原因:使用
#define
指令指定的宏在实际编译器开始处理代码之前,由预处理器计算并替换为计算值。因此,考虑到您的(上一个)
#定义大小25
行,代码:

int*ptr=newint[SIZE];
对于编译器而言,将与以下内容完全等效:

int*ptr=newint[25];
事实上,宏的这种用法非常普遍——例如,在必须为不同平台构建的代码中,
SIZE
的值在不同的构建中会有所不同。例如,可以有条件地定义
SIZE
,如下所示:

#ifdef平台25
#定义尺寸25
#否则
#定义尺寸50
#恩迪夫
或者,甚至可以使用编译器命令行选项定义
SIZE
宏,例如开关(取决于编译器):

我可以用 C++中的宏常量? 简短回答:是的

原因:使用
#define
指令指定的宏在实际编译器开始处理代码之前,由预处理器计算并替换为计算值。因此,考虑到您的(上一个)
#定义大小25
行,代码:

int*ptr=newint[SIZE];
对于编译器而言,将与以下内容完全等效:

int*ptr=newint[25];
事实上,宏的这种用法非常普遍——例如,在必须为不同平台构建的代码中,
SIZE
的值在不同的构建中会有所不同。例如,可以有条件地定义
SIZE
,如下所示:

#ifdef平台25
#定义尺寸25
#否则
#定义尺寸50
#恩迪夫
或者,甚至可以使用编译器命令行选项定义
SIZE
宏,例如开关(取决于编译器):


#定义大小25
为什么要使用宏而不是合适的变量,比如
constexpr int SIZE=25
new int[25]
有效,因此
new int[SIZE]
无效too@JesperJuhl如果情况合适,为什么我不应该?是什么使得
constexp int SIZE=25比使用宏更好?@JesperJuhl一个使用案例是不同目标平台的构建之间的
大小
值不同(将
#define SIZE xx
放在条件预处理器指令中)。@RobertS如果有人决定使用名称
SIZE
(例如,局部变量或命名空间范围内的变量/函数)宏将破坏它。这不会发生在
constepr int SIZE
中(除非在完全相同的范围内声明新对象).
#定义大小25
为什么要使用宏而不是合适的变量,如
constepr int SIZE=25;
new int[25]
是有效的,因此
new int[SIZE]
too@JesperJuhl如果情况合适,为什么我不应该?是什么使得
constexp int SIZE=25;
比使用宏更好?@JesperJuhl一个使用案例是
SIZE
的值在不同目标平台的构建之间变化(将
#define SIZE xx
放在条件预处理器指令中)。@RobertS如果有人决定将名称
SIZE
用于任何事情(例如,局部变量或命名空间范围内的变量/函数),您的宏将破坏它。这不会发生在
constepr int SIZE
(除非在完全相同的范围内声明新对象)。我的想法是,这可能是不允许的,因为在我之前的想法中,动态分配不打算这样做。非常感谢。我的想法是,这可能是不允许的,因为在我之前的想法中,动态分配不打算这样做。非常感谢。
/DSIZE=25