[C++] Может быть, он и удобнее, но я предпочитаю std::string, в частности из-за отсутствия таких вот ударов из-за угла.08.04.03 19:16 Число просмотров: 1167 Автор: Ktirf <Æ Rusakov> Статус: Elderman
> > int n = 12345;
> AnsiString s;
> s = n; // !!! преобразование происходит автоматически !!!
> Ну если из строки в число то AnsiString вообще рулит:
AnsiString s=15;
int n=s.ToInt(); //будет исключение при кривой строке
int m=s.ToIntDef(0); //исключения не будет. Будет 0
float k=s.ToDouble();//ну ясно
и еще чтото там есть....
Единственное - atoi, itoa, sprintf меньше занимают и быстрее работают.
А что делает вышеупомянутый AnsiString, если я напишу так:
char t;
// ...
AnsiString s1 = t;
AnsiString s2 = (int) t;
То есть я догадываюсь об ответе, но хотелось бы знать наверняка.
Если char считается символом, то следующий код работает несколько неожиданно:
template <class N>
AnsiString NumberToString(N n)
{
return n;
}
// ...
for (char t = 1; t < 8; ++t)
printf("%s\n", (const char *) NumberToString(t));
Я знаю, что использование char в качестве счетчика - не слишком хорошая идея, тем не менее, передавая char в функцию NumberToString, я все же ожидаю, что он будет оттрактован как число. Но вместо чисел я получу несколько непонятных символов, сопровождающихся эффектным писком в конце.
Если же char в самом верхнем вопросе считается числом, то следующие две записи неравнозначны, что тоже довольно неожиданно:
AnsiString s1 = "c";
AnsiString s2 = 'c';
И то, и другое компилируется, но отловить такую ошибку будет мудрено.
В свете всего вышесказанного я согласен с amirul'ом и предпочитаю семейство atox/strtox. Ну и sprintf для печати, есесно :) Это все, кстати, не вылезая из чистого C.
> А что делает вышеупомянутый AnsiString, если я напишу так: > > char t;
> // ...
> AnsiString s1 = t;
> AnsiString s2 = (int) t;
> s1 = символ с кодом t
s2 = строковое представление числа t
> То есть я догадываюсь об ответе, но хотелось бы знать > наверняка. > Если char считается символом, то следующий код работает > несколько неожиданно: > > template <class N>
> AnsiString NumberToString(N n)
> {
> return n;
> }
> // ...
> for (char t = 1; t < 8; ++t)
> printf("%s\n", (const char *) NumberToString(t));
> > Я знаю, что использование char в качестве счетчика - не > слишком хорошая идея, тем не менее, передавая char в > функцию NumberToString, я все же ожидаю, > что он будет оттрактован как число. Но вместо чисел я > получу несколько непонятных символов, сопровождающихся > эффектным писком в конце. он будет оттрактован как символ. хочешь число - явно преобразовывай типы или юзай unsigned char.
> Если же char в самом верхнем вопросе считается числом, то > следующие две записи неравнозначны, что тоже довольно > неожиданно: > > AnsiString s1 = "c";
> AnsiString s2 = 'c';
> > И то, и другое компилируется, но отловить такую ошибку > будет мудрено.
> В свете всего вышесказанного я согласен с amirul'ом и > предпочитаю семейство atox/strtox. Ну и sprintf для печати, > есесно :) Это все, кстати, не вылезая из чистого C. ну да, тока ансистринг удобнее
[C++] Может быть, он и удобнее, но я предпочитаю std::string, в частности из-за отсутствия таких вот ударов из-за угла.08.04.03 19:16 Автор: Ktirf <Æ Rusakov> Статус: Elderman