2

Cで

void foo(int size ,int a[][size])
{
    printf("%d\n", a[0][0]);
}
int main(int argc, char const *argv[])
{
    int a[5][5] = {0};
    foo(5, a);
    return 0;
}

正常に動作します

でもC++でも同じ

void foo(int size, int a[][size])
{
    cout << a[0][0] << endl;
}
int main(int argc, char const *argv[])
{
    int a[5][5] = {0};
    foo(5, a);
    return 0;
}

動作しません。次の 2 つのエラーが発生します。

 error: use of parameter ‘size’ outside function body
 In function ‘void foo(...)’:
 error: ‘a’ was not declared in this scope

なぜこれが起こるのか誰でも説明できますか?C または C++ のコンパイラに依存する問題についても説明してください。

4

1 に答える 1

7

C++ はもはや C のスーパーセットではありません。C++ に相当するものがない C の可変長配列機能を使用しています。これは違法な C++ であり、率直に言って、非常に悪い習慣です。std::arrayとテンプレートを使用します。それが彼らの目的です。C配列はひどいからです。

于 2013-07-10T18:41:51.100 に答える