Форум программистов, компьютерный форум CyberForum.ru

string_set_int - C++

Восстановить пароль Регистрация
 
Adler
 Аватар для Adler
78 / 78 / 3
Регистрация: 07.05.2009
Сообщений: 316
30.09.2010, 20:19     string_set_int #1
Здравствуйте!

Есть такая функция:
C++
1
2
3
4
5
6
7
8
9
10
void string_set_int(void* Result,void* Op){
  (*((string*)(Result)))=(*((int*)(Op))); // Что вызывает эта строка?
}
 
void main()
{
  string s;int i=61;
  string_set_int(&s,&i);
  if(s=="=")while(true);
}
По идеи, это не должно компилироваться, но оно компилируется и работает =(.

Почему? Ведь это тоже самое, что и это:
C++
1
2
string s;int i=61;
s=i;
или нет?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
30.09.2010, 21:04     string_set_int #2
Почему не должно компилироваться?
Adler
 Аватар для Adler
78 / 78 / 3
Регистрация: 07.05.2009
Сообщений: 316
30.09.2010, 21:39  [ТС]     string_set_int #3
а всё понял... int к char привёлся и вызвал конструктор...
Mr.X
Эксперт С++
 Аватар для Mr.X
2801 / 1577 / 247
Регистрация: 03.05.2010
Сообщений: 3,662
30.09.2010, 21:54     string_set_int #4
Ну, во-первых, вы лишних скобок тут миллион наставили.
Столько будет достаточно:
C++
1
*(string*)Result = *(int*)Op;
Во-вторых, так тоже работает:
C++
1
2
3
std::string  s;
int i = 61;
s = i;
У класса string есть оператор:
C++
1
string& operator= (char c);
который присваивает строку из одного символа c. Видимо он здесь и срабатывает. А конструктора, кстати, с таким преобразованием у string нет.
Yandex
Объявления
30.09.2010, 21:54     string_set_int
Ответ Создать тему
Опции темы

Текущее время: 09:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru