c++数组是否可以在运行时确定长度并且进行初始化

qq_40162781 2019-11-16 11:43:24
今天在家中阅读c++ primer复习c++语法的知识,看到了2.4.4 constexpr和常量表达式这一章节



它说常量表达式(const expression)是指值不会改变并且在编译过程就能得到计算结果的表达式.。被const修饰的对象也不一定是常量表达式。

我想了想需要用到常量表达式应该有数组了。但是在c++中被const修饰的对象能为数组定义长度(在c中不能),于是我编写了一段程序测试const对象为非常量表达式并且在运行时才能确定值的时候能否成功定义数组。

#include <iostream>
#include <string>

using namespace std;

int get_size(int vsz);

int main()
{
const int size=get_size(2);
int array[size]={1,2,3,4,5,6,7,8,9};

cout<<endl;

for(auto p:array)
{
cout<<p<<endl;
}
return 0;
}

int get_size(int vsz)
{
int i;
cin>>i;
return vsz*i;
}

get_size为传入的值提供程序运行后用户输入的值的倍数。该值在程序运行后才能确定。
array数组大小应该在编译时就要确定大小。但是该程序在g++ (Debian 6.3.0-18+deb9u1) 6.3.0编译器中编译通过,并且除了输入1外也正确。
./a.out
1

段错误

./a.out
2

1
2
3
4

./a.out
6

1
2
3
4
5
6
7
8
9
0
0
0

数组实现了在运行时确定长度并且进行初始化。虽然1报错





...全文
302 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
advance_coder 2019-11-16
  • 打赏
  • 举报
回复
Linux下支持, 比如 char a[]; a = new char[len]; 可以g++ -o dest.s -S c++源码文件,看一下汇编实现,就能了解其原理 vc下不支持。
gouyanfen 2019-11-16
  • 打赏
  • 举报
回复
引用 3 楼 advance_coder 的回复:
[quote=引用 2 楼 gouyanfen的回复:][quote=引用 1 楼 advance_coder 的回复:] Linux下支持, 比如 char a[]; a = new char[len]; 可以g++ -o dest.s -S c++源码文件,看一下汇编实现,就能了解其原理 vc下不支持。
VC下面是 char *a; a=new char[len];[/quote] vc下,gcc下都可以这么定义,但是是指针了。 也可以通过a[i]的方式来访问。 只是gcc支持动态数组定义。vc不支持。[/quote] 一切数据都可以看成指针,语法糖而己,不必那么在意,a[]解释为动态数组,他怎么解释是他的事,事实还是转成指针了
advance_coder 2019-11-16
  • 打赏
  • 举报
回复
引用 2 楼 gouyanfen的回复:
[quote=引用 1 楼 advance_coder 的回复:] Linux下支持, 比如 char a[]; a = new char[len]; 可以g++ -o dest.s -S c++源码文件,看一下汇编实现,就能了解其原理 vc下不支持。
VC下面是 char *a; a=new char[len];[/quote] vc下,gcc下都可以这么定义,但是是指针了。 也可以通过a[i]的方式来访问。 只是gcc支持动态数组定义。vc不支持。
gouyanfen 2019-11-16
  • 打赏
  • 举报
回复
引用 1 楼 advance_coder 的回复:
Linux下支持, 比如 char a[]; a = new char[len]; 可以g++ -o dest.s -S c++源码文件,看一下汇编实现,就能了解其原理 vc下不支持。
VC下面是 char *a; a=new char[len];

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧