Форум программистов, компьютерный форум, киберфорум С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/16: Рейтинг темы: голосов - 16, средняя оценка - 4.94
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
1

Ответ на вопрос

17.01.2012, 13:57. Показов 3225. Ответов 38
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Блин препод задал вопрос не знаю как ответить на него и почему такой ответ?
вот вопрос:
Какой порядок вызова методов/конструкторов?
C++Выделить код
1
2
3
4
5
6
7
8
9
10
class A {
A();
A(const A&);
A& operator=(const A&);
};
 
void f(){
A a;
A b = (b = a);
}
 Комментарий модератора 
Код выделяем тегами!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2012, 13:57
Ответы с готовыми решениями:

Ответ на вопрос по С++
определение объединения (union), синтаксис, назначение спасибо

Выводить случайный ответ на заданный вопрос
Здрасьте! Есть небольшая идейка, но я пока не особо шарю в C++. В общем: я ввожу в консоли любой...

Напишите программу, которая сравнивает ответ пользователя на вопрос с правильным ответом.
Напишите программу, которая сравнивает ответ пользователя на вопрос с правильным ответом.

Вопрос - ответ.
В этом топике я и многие другие опытные SEO мастера будут отвечать на ваши вопросы, дабы не...

38
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
18.01.2012, 15:01 21
Author24 — интернет-сервис помощи студентам
давайте перепишем
C++Выделить код
1
A b = (b = a);
в псевдокод:
C++Выделить код
1
A b.operator=(b.copy_ctor(a));
теперь скажите сами
Цитата Сообщение от dimcoder Посмотреть сообщение
Где именно
1
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
18.01.2012, 18:43 22
Цитата Сообщение от retmas Посмотреть сообщение
вполне defined behavior
Холиварите со стандартом?
0
31 / 31 / 6
Регистрация: 15.12.2011
Сообщений: 108
18.01.2012, 19:08 23
вот меня смущает то что для несконструированной переменной вызывается сначала оператор присваивания, а потом копирующий конструктор, разве это не подозрительно ???
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,686
19.01.2012, 02:22 24
Да, непонятно. copy_ctor это хорошо, конечно, но его вызывает объект b, который должен сконструироваться прежде. А происходит наоборот.

Добавлено через 7 минут
То есть я понимаю, что
C++Выделить код
1
Ex b= (b = a);
Транслируется в
C++Выделить код
1
Ex b(b = a);
Эффект кстати, тот же самый. И я понимаю, что прежде чем объект b сконструируется, в скобках должно что-то произойти. И вот если бы ось выкинула исключение, всё стало бы понятно, действительно b= a при отсутствии первой как-то не очень правильно.
1
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
19.01.2012, 11:52 25
признаю. я был не прав и сам себя запутал.
это
C++Выделить код
1
A b = (b = a);
действительно undefined behavior и даже не соответствует псевдокоду
C++Выделить код
1
A b.operator=(b.copy_ctor(a));

Не по теме:

а так хотелось верить:pardon:

0
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
19.01.2012, 12:18 26
Цитата Сообщение от retmas Посмотреть сообщение
действительно undefined behavior
Приехали.
Я то уж начал убеждаться, что я не прав.
0
retmas
19.01.2012, 12:30
  #27

Не по теме:

Цитата Сообщение от dimcoder Посмотреть сообщение
Я то уж начал убеждаться
не идите по моему пути:)

0
4863 / 2662 / 913
Регистрация: 29.11.2010
Сообщений: 5,743
19.01.2012, 14:22 28
Хм. Получается, что в параметре конструктора можно использовать (вызвать метод или переменную) объект класса имени самого себя, для которого еще не применен конструктор.

Проверьте, кто-нибудь, для VS?

Must be exploitable.
0
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
19.01.2012, 14:42 29
lemegeton, не знаю на счет VS, но LWS
http://liveworkspace.org/code/... f6f420384e

Хотя мой DevCpp хавает.
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
19.01.2012, 14:48 30
Цитата Сообщение от dimcoder Посмотреть сообщение
lemegeton, не знаю на счет VS, но LWS
http://liveworkspace.org/code/... f6f420384e

Хотя мой DevCpp хавает.
просто у вас там b не обьявлена. вот http://liveworkspace.org/code/... 512ed32afe ворнинг выдает
а здесь уже даже ворнинга нет http://liveworkspace.org/code/... 605cbf4532
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,686
19.01.2012, 14:55 31
Цитата Сообщение от dimcoder Посмотреть сообщение
Хотя мой DevCpp хавает.
Там g++ версии 4.5.0 (В лучшем случае), замени:
Предлагаю людям как усовершенствовать IDE Dev-Cpp 4.9.9.2

на 4.6.1, авось хавать не будет
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
19.01.2012, 15:00 32
gcc 4.6.2 - жрет
vs2010 - жрет
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,686
19.01.2012, 15:02 33
4.6.1 это не жрёт:
C++Выделить код
1
2
3
4
5
6
int main ()
{
   int a = 10;
   b = (b = a);
   return 0;
}
4.6.2 стабильной сборки не видел
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
19.01.2012, 15:04 34
Цитата Сообщение от kravam Посмотреть сообщение
4.6.1 это не жрёт:
C++Выделить код
1
2
3
4
5
6
int main ()
{
   int a = 10;
   b = (b = a);
   return 0;
}
4.6.2 стабильной сборки не видел
там b не обьявлен же
1
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,686
19.01.2012, 15:09 35
Ну да. Ненормално то что более старые версии хавают
Ответ на вопрос

И это надо исправлять
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
19.01.2012, 15:20 36
и старые не схавают, просто там описка скорее всего
вопрос уже по моему не в том что выражения
C++Выделить код
1
2
    A a;
    A b = (b = a);
хаваются или нет без А во 2 строке, а в том, чтоб он ругался на это A b = (b = a);

Добавлено через 1 минуту
для встроенных типов gcc выдает ворнинг, а для определенных пользователем - молчит
vs2010 молчит всегда
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
19.01.2012, 16:05 37
Цитата Сообщение от retmas Посмотреть сообщение
действительно undefined behavior
Теперь осталось довести это до сведения преподавателей.
А ведь часто и на собеседованиях задают примеры с неопределенным поведением, прося рассказать, какое будет поведение.
0
4863 / 2662 / 913
Регистрация: 29.11.2010
Сообщений: 5,743
19.01.2012, 16:39 38
Цитата Сообщение от Mr.X Посмотреть сообщение
А ведь часто и на собеседованиях задают примеры с неопределенным поведением, прося рассказать, какое будет поведение.
Вопросы с подвохом самые сложные. В таких случаях стоит объяснить, почему будет UB и что, по-вашему мнению, сделает известный Вам компилятор. HR'у, конечно, обычно хрен объяснишь.
0
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
19.01.2012, 16:44 39
Да уж.
C++Выделить код
1
2
3
4
5
6
int main ()
{
   int a = 10;
   int b = (b = a); 
   return 0;
}
Вот что значит писать второпях.

Не по теме:

C++Выделить код
1
A b = (b = a);
Ох уж это быдлокодерство...

0
19.01.2012, 16:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2012, 16:44
Помогаю со студенческими работами здесь

Ответ на вопрос.
Вот задали мне с информатики написать програмку на паскале, чтобы она задавала вопрос, и...

Ответ на вопрос.
Всем здравствуйте. Предмет: Управление данными. Ответьте, пожалуйста, на вопрос: 98. Как можно...

вопрос-ответ
Возникло несколько вопросов(по мере возникновения буду добавлять новые). нет ответа 1) Поисковики...

Вопрос и ответ.
В данной теме каждый может задать вопрос и получить один ответ на него от меня. Дабы тема...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru