W jaki sposób pobrać długość łańcucha jako stałą?

2018-12-15 23:34
0

joł,
mam tu takie dziwne coś:

int num = 5673;
std::string digits = std::to_string(num);
constexpr int len = digits.length(); //nope
char tab[len];

fajnie by było gdybym mógł zadeklarować tablicę znaków o rozmiarze len, ale kompilator mi krzyczy, że to nie jest stała wartość więc.. no nie.
Jak więc napisać kod abym mógł zadeklarować tablicę znaków o długości jakiegoś innego stringa? Próbuję bawić się konwersją typu
int -> string -> char
fajnie by też było jakby mi ktoś uświadomił, że jest o wiele lepsza opcja takiej konwersji.
pozdro :P


𝓜𝓮𝓷𝓽𝓪𝓵
𝓐𝓫𝓾𝓼𝓮
𝓣𝓸
𝓗𝓾𝓶𝓪𝓷𝓼

Pozostało 580 znaków

2018-12-15 23:36
kq

std::to_string nie jest constexpr, więc nic takiego nie uda Ci się zrobić. Możesz co najwyżej napisać własną funkcję constexpr, która to policzy.


Pozostało 580 znaków

2018-12-15 23:41
0

dobra, w sumie zagalopowałem się z constexpr więc to zamieniłem na zwykłego const, ale nadal w zasadzie jest ten sam problem - wartość len nie jest stała. Błąd jest dlatego, że metoda length() z której pobieram wartość zmienia się podczas kompilacji?


𝓜𝓮𝓷𝓽𝓪𝓵
𝓐𝓫𝓾𝓼𝓮
𝓣𝓸
𝓗𝓾𝓶𝓪𝓷𝓼

Pozostało 580 znaków

2018-12-15 23:43
kq
1

Wielkość tablicy musi być znana w czasie kompilacji. Teoretycznie, znając wszystkie definicje kompilator powinien to móc wydedukować, ale reguły języka mówią tylko o constexpr.


Pozostało 580 znaków

2018-12-15 23:45
1

O co dokładnie chodzi, ale takie coś się kompiluje:

int num = 5673;
std::string digits = std::to_string(num);
const int len = digits.length();
char arr[len];

naprawdę? mi na visualu 2k17 nie chce dać się skompilować :( a Ty na czym to skompilowałeś? - Sunnydev 2018-12-15 23:48
gcc -std=c++17 - lion137 2018-12-15 23:50
lol, online compiler też mi to kompiluje. dziwne. - Sunnydev 2018-12-15 23:52
To jest VLA, które GCC obsługuje w C++ jako rozszerzenie kompilatora. Zgodnie ze standardem jest to jednak niepoprawny zapis. - hauleth 2018-12-16 18:24

Pozostało 580 znaków

2018-12-15 23:47
0

w sumie racja... tylko kurczę ciekawi mnie dlaczego length() nie jest stałą wartością. W takim wypadku czego mam użyć aby zadeklarować tablicę znaków o długości jakiegoś stringa?


𝓜𝓮𝓷𝓽𝓪𝓵
𝓐𝓫𝓾𝓼𝓮
𝓣𝓸
𝓗𝓾𝓶𝓪𝓷𝓼

Pozostało 580 znaków

2018-12-15 23:49
kq
1

string nie był designowany z myślą o constexpr. Napisz własną funkcję obsługującą liczby, albo ogólnie stringi jakie planujesz używać.


edytowany 1x, ostatnio: kq, 2018-12-15 23:50

Pozostało 580 znaków

2018-12-16 00:02
0

Dobra, niepotrzebnie się bawię zwykłymi tablicami. std::vector rozwiązuje wszystkie problemy. Dzięki za wskazówki.


𝓜𝓮𝓷𝓽𝓪𝓵
𝓐𝓫𝓾𝓼𝓮
𝓣𝓸
𝓗𝓾𝓶𝓪𝓷𝓼
edytowany 1x, ostatnio: Sunnydev, 2018-12-16 00:03

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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