LINUX.ORG.RU

вопрос по с++.


0

0

помогите разобраться... пытаюсь создать динамический массив .

почему такой код работает:

cin >> m >> n;
typedef char charn[n];
charn *ch = new char[m][n]

а такой не работает:
cin >> m >> n;
char **ch = new char[m][n];

(ругается - error: cannot convert `char (*)[((n - 1) + 1)]' to `char**' in initialization)

хотя семантически в первом и во втором случае делается одно и тоже...
anonymous

и первый и второй вариант ошибочны. То что gcc компилирует первый вариант это вина gcc.

Ты хочешь сделать какую-то конкретную вещь или просто экспериментируешь a-la Извраты на C++?

dilmah ★★★★★
()

> семантически в первом и во втором случае делается одно и тоже...

Семантически-то, как раз, не одно и то же. А за первый вариант надо в на пару недель в карцер сажать :)

watashiwa_daredeska ★★★★
()

В ISO C++ вообще нельзя использовать в качестве границ массива неконстантные значения. Используй std::vector.

int19h ★★★★
()
Ответ на: комментарий от int19h

>>В ISO C++ вообще нельзя использовать в качестве границ массива неконстантные значения.

а почему gcc это спокойно переваривает ?

anonymous
()
Ответ на: комментарий от int19h

А причем тут C99, это ж не плюсовый стандарт. ЕМНИП В ISO C++ можно использовать variable sized массивы, только создаваться они должны в стеке, т.е. как нибудь так:

int m = 10; int array[m]

anonymous
()
Ответ на: комментарий от int19h

на такой код компайлер не ругается:

#include <iostream>

int main()
{
    int l;
    std::cin >> l;
    int array[l];
    return 0;
}

компилировал с ключом -std=c++98

anonymous
()
Ответ на: комментарий от anonymous

> ЕМНИП В ISO C++ можно использовать variable sized массивы, только создаваться они должны в стеке

не, EMT25 правильно сказал: в C99 такая фича есть, в C++98 нет.

А то что там было в коде:

typedef char charn[n];

это вообще не в кассу по моему. Динамических типов точно ни в каком стандарте C/C++ нет. По моему там n просто тихо игнорируется.

dilmah ★★★★★
()
Ответ на: комментарий от anonymous

> на такой код компайлер не ругается

$ g++ -std=c++98 -pedantic aaa.cpp
aaa.cpp: In function `int main()':
aaa.cpp:7: error: ISO C++ forbids variable-size array `array'

Ы?

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.