加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

编译时期的聚合赋值

发布时间:2020-12-13 20:31:58 所属栏目:百科 来源:网络整理
导读:C++提供的聚合赋值是个非常方便的语法,免去了一堆堆的for。 举个简单的例子: int a[] = {1,2,3,4,5}; 这就是对数组a进行的聚合赋值。数组a的长度是5,在a[0]~a[4]里分别按顺序的存放着1,2,3,4,5. 可是如果你想在编译程序时对这些(指聚合赋值后的变量

C++提供的聚合赋值是个非常方便的语法,免去了一堆堆的for。

举个简单的例子:

int a[] = {1,2,3,4,5};

这就是对数组a进行的聚合赋值。数组a的长度是5,在a[0]~a[4]里分别按顺序的存放着1,2,3,4,5.

可是如果你想在编译程序时对这些(指聚合赋值后的变量)进行引用时,可能就会出现问题。

如果有如下代码

C++ CODE :file1
1
2
3
4
5
6
const int i[] = { 1,2,3,4 };
float f[i[3]]; //Illegal
struct S { int i,j; };
const S s[] = { { 1,2 },{ 3,4 } };
double d[s[1].j]; // Illegal
int main() {}

看起来我们定义了一个数组i,而且按顺序的初始化为1,2,3,4,5.

语句

就是用i[3]里存的值(4)对数组f的大小进行初始化。

一切看起来像是如此平静。

但是,错误就在这时候发生了,编译器会给出一个错误:

“variable-size type declared outside of any function”

为什么呢????

因为编译器在编译时期不对数组i里边的数据进行处理,也就是说,它仅仅知道有i这么一个数组,大小它也知道,但是里边的值却不知道(或者说是不必知道)。

相类似的,语句

也是有同样的错误。

但是我们如果对程序略加修改

C++ CODE :file2
1
2
3
4
5
6
7
int main() {
const int i[] = { 1,4 } };
double d[s[1].j]; // Illegal
}

此时就能通过编译。

这样的问题,需要打醒十二分精神,要出出错了,还不知道自己错在哪。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读