C++ - tablice

0

Witam wszystkich forumowiczów :)

W wielu książkach do programowania tablice rozróżnia się na statyczne i dynamiczne.

Moje pytanie: czy taki sposób użycia tablic jest pewnego rodzaju ewenementem:

 
#include <iostream>

using namespace std;

int main(){
    
    int rozmiar;
    cin >> rozmiar;
    
    int tablia[rozmiar];   // - chodzi o tą linijkę
       
    return 0;   
}

Wszędzie piszą, że takie użycie jest błędem, bo rozmiar powinien być znany już w czasie kompilacji...
Jednakże mi taki sposób działa i sam nie wiem sam czy mam używać mechanizmu do tworzenia dynamicznych tablic, czy pozostać z tym ;/

Z góry dziękuję wszystkim za odpowiedź :)

0

Owszem działa ale tylko na jednym kompilatorze.

0

Jeżeli można spytać to co przez to mam rozumieć? :)

0

Że jeśli byś użył innego kompilatora, to by nie działało. Powinieneś alokować pamięć dynamicznie ;) i później ją zwalniać.

0

użyj klasy vector - opis tutaj, poszukaj sobie też przykładów (na tej stronie też są):
http://www.cplusplus.com/reference/vector/vector/

tak jak napisałeś robi się częściej w C gdzie nie ma innych możliwości.

0
C_Grinch napisał(a):

Jednakże mi taki sposób działa

w c++ możesz niejednokrotnie spotkać się z takimi sytuacjami, które często (zwykle) będą działać ale ogólnie nie masz pewności czy zawsze i __wszędzie __zadziałają. Jeśli chcesz tworzyć oprogramowanie w tym języku, które zadziała ci w każdej sytuacji i niezależnie od użytego kompilatora powinieneś pisać zgodnie ze standardem. Wiele kompilatorów posiada dodatkowe mechanizmy "tuningujące" język. Pamiętaj jednak, że nie są one zgodne ze standardem i stosowanie ich może zawęzić twoje możliwości pod kątem kompilacji ich w innych architekturach bądź pod innymi kompilatorami. Oczywiście z tym programowaniem zgodnie ze standardem oraz zgodnością kompilatorów z nim to różnie bywa. Wszystko dla ludzi, pytanie co i do czego potrzebujesz, ale gdy miewasz jakieś wątpliwości jak ta w tym temacie, to warto zajrzeć do tego dokumentu i zobaczyć co na dany temat sądzi komitet standaryzujący (a w tym sam twórca języka).

0

GCC obsługuje VLA z >=C99 w C++. Można dodać do komendy: -pedantic żeby zobaczyć ostrzeżenie:
warning: ISO C++ forbids variable length array ‘tablia’ [-Wvla] które informuje o tym, że to nie jest dopuszczalne w standardowym C++.

Z tego i innych powodów w GCC sugeruję używanie -Wall -Wextra -pedantic przy każdej kompilacji. (Można też dodać -Weffc++, ale nie zawsze jest to przydatne)

1 użytkowników online, w tym zalogowanych: 0, gości: 1