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

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

2

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.

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?

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.

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];
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?

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ć.

0

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

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