Po prostu trochę grając z C++. Co naprawdę chcę zrobić, to móc ustawić funkcję z wartościami domyślnymi zdefiniowanymi dla argumentu tablica lub wskaźnik. Aby wszystko było proste, po prostu użyj tablicy. Tak:Wartości domyślne dla argumentów tablicowych
void experimentA(char a[3] = {'a', 'b', 'c'});
kompilator (LLVM GCC 4.2 z GNU99) twierdzi, "że ekspresja". Jest to dość nudne, ale koledzy mówili mi, że tak się dzieje, ponieważ "wartość", którą próbuję przypisać, jest przydzielana statycznie, podczas gdy zmienna, którą próbuję przypisać do (a[3]
), jest automatyczna.
Ale nie jestem całkowicie pewien, czy to przypadek, ponieważ jestem w stanie to zrobić:
void experimentB(char a[3] = "abc");
i kompilator tylko ostrzega mnie, że ciąg-dosłownego do char * konwersja jest przestarzała .
Nie rozumiem, jak "abc" różni się zasadniczo od {'a', 'b', 'c'}, aby spowodować tę rozbieżność. Każdy wgląd jest bardzo doceniany!
Pamiętaj, że w "ABC" jest naprawdę { 'a', 'b', 'c', '\ 0'} który pasowałby do tablicy o rozmiarze 4. –
@Doug: Kiedy literał łańcuchowy jest używany do zainicjowania tablicy znaków, nie musi być miejsca na terminator o wartości NULL. Jeśli programista określa dokładną długość, powinien wiedzieć, co robi. –