我看c++ primer 第五版中文版时 看到了书上说数组的长度必须是常量表达式(书上的原话是指的维度,但感觉是翻译的问题,指的确实是长度),然后我试着用变量来写,能通过编译,这里是什么情况,是编译器没有检查,还是语法上本来就合法? 而且我在上面写了一个函数,返回值是int,没有标注constexpr,也可以作为数组的长度,同求解释。!
业精于勤,荒于嬉;行成于思,毁于随。
異議 @同意して受け入れます (エスケープこのテストを使用できます
int txt_size() { int a、b; scanf("%d%d", &a, &b); -b を返します。 }
視覚的には拡張されています
VS2012 では、コンパイルできる int ib[4*7-14] を除いて、その他はすべて失敗します。そこで問題は、CB がこのように言語機能を拡張することが本当に良いことなのかということです。
書き込んだ変数の値は決定されているため、コンパイラは配列にメモリを割り当てるときにすでに正確な値を取得しています。
C++ 配列の長さは変更できないため、非常に大きな配列ストレージ キューが開かれます。
int q[10000001] //C++ の超大規模配列
変数 a と配列 h があるようなものです。
int a=2; int h[a]; //これは int h[2] と同等です。 a=5; //それがどのように変化しても、
h[4] は現時点では存在しません。試してください。
考えられる理由は、コンパイラが C99 VLA もサポートしていることです。これは、C++ 標準の意味では違法です。 -Wall -pedantic のようなフラグを追加して再度コンパイルしてみてください。エラーが発生するはずです。
異議 @同意して受け入れます (エスケープ
このテストを使用できます
視覚的には拡張されています
VS2012 では、コンパイルできる int ib[4*7-14] を除いて、その他はすべて失敗します。そこで問題は、CB がこのように言語機能を拡張することが本当に良いことなのかということです。
書き込んだ変数の値は決定されているため、
コンパイラは配列にメモリを割り当てるときにすでに正確な値を取得しています。
C++ 配列の長さは変更できないため、非常に大きな配列ストレージ キューが開かれます。
変数 a と配列 h があるようなものです。
h[4] は現時点では存在しません。試してください。
考えられる理由は、コンパイラが C99 VLA もサポートしていることです。これは、C++ 標準の意味では違法です。 -Wall -pedantic のようなフラグを追加して再度コンパイルしてみてください。エラーが発生するはずです。