быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||||||||||||
1 | ||||||||||||||||
Конструктор, принимающий в качестве аргумента ссылку на объект, всё портит08.09.2013, 14:08. Показов 4059. Ответов 47
Метки нет (Все метки)
Друзья! Вот корректный код:
0
|
08.09.2013, 14:08 | |
Ответы с готовыми решениями:
47
Класс не содержит конструктор, принимающий 3 аргумента: найти ошибку в коде Создать функцию, которая принимает в качестве аргумента ссылку на string, и преобразует все буквы в верхний регистр Компилятор требует конструктор, принимающий аргументом экземпляр того же класса (не ссылку) Как передать в качестве аргумента функции ссылку на массив |
292 / 172 / 47
Регистрация: 22.03.2010
Сообщений: 488
|
|
09.09.2013, 21:47 | 22 |
А ведь с опцией -fno-elide-constructors увидят. Ведь без учета оптимизаций здесь и должна быть ошибка компиляции: вы не передаете конструктору копирования lvalue
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
09.09.2013, 21:50 | 23 |
Просто конструкторы копирования у kravam "любимая мозоль"
0
|
09.09.2013, 21:53 | 24 |
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
09.09.2013, 22:02 [ТС] | 25 |
Очень может быть. В таком случае зачем он требует КК (назовём его "правильный"), если при предоставлении ему правильного КК он от него избавляется в целях оптимизации? Типа- дай-ка, kvaram, я посмотрю, а умеешь ли ты писать правильные КК?
Добавлено через 3 минуты ого! Но так-то ситуации немного разнятся. В той теме я разобрался, почему КК не вызывается- просто объект уже создаётся по месту, что называется. Так он и в этой теме тоже воздаётся по месту. Но компилятор зачем-то требует ПРАВИЛЬНЫЙ КК, а потом него не использует (коль скоро оптимизирует код- создаёт объект там, где он будет в конце концов). Предметы у тем всё-таки разные.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
09.09.2013, 22:04 | 26 |
потому что сначала идет компиляция а потом оптимизация( уже бинарного кода)
у тебя ошибка на этапе компиляции, до оптимизатора дело не доходит оптимизировать нечего, код не создан
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
09.09.2013, 22:04 | 27 |
Потому, что это разные этапы. На этапе синтаксического разбора компилятор "не задумывается" об оптимизации. А на этапе оптимизации уже поздно делать послабления. Да и не нужно.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
09.09.2013, 22:06 [ТС] | 28 |
Специально для хороших парней не поленюсь повторить- меня не интересует, как ОБЯЗАТЕЛЬНО вызвать КК. Меня интересует, почему компилятор требует правильный КК, а потом его в целях оптимизации или чего там убирает на фиг.
0
|
292 / 172 / 47
Регистрация: 22.03.2010
Сообщений: 488
|
|
09.09.2013, 22:26 | 29 |
Оптимизация может происходить на разных стадиях компиляции, но, как правило, как выше написал grizlik78, оптимизации происходят после синтаксического и семантического анализа кода.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|||||||||||||||||||||
10.09.2013, 21:56 [ТС] | 30 | ||||||||||||||||||||
Многие вопросы я уже выяснил. Но один, очень важный не выяснил, а именно: каков код, в котором использовался бы конструктор который не const?
1) Когда возвращаемое значение функции имеет тип класса 2) Когда аргумент имеет тип класса 3) Когда один объект используется для инициализаци другого объекта) Ну и чтобы вызвался
0
|
Неэпический
|
|
10.09.2013, 22:10 | 31 |
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||||||||||||
10.09.2013, 22:42 [ТС] | 32 | |||||||||||||||
Спасибо. А вы угадали или знали? Если знали, то разъясните пожалуйста, чем таким отличаются эти варианты:
0
|
Неэпический
|
||||||
10.09.2013, 22:45 | 33 | |||||
тем что в первом c1 - это не константный объект, значит можно вызвать foo ( foo & ) или foo ( const foo & ).
а во втором foo ( 9 ) - это объект константный и не просто константный, а временный, так что можно вызывать только foo ( const foo & ). Можно даже без конструкторов и классов привести пример подобного поведения:
0
|
BumerangSP
|
10.09.2013, 23:02
#34
|
Не по теме: Видимо, я объяснять не умею :) Тоже самое описывал еще в постах три и пятнадцать.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||
10.09.2013, 23:05 [ТС] | 35 | |||||
стоп. Во-первых, договорились использовать конструктор инициализации
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
10.09.2013, 23:10 [ТС] | 37 |
и опять- почему константны, да ещё и как бы?
Добавлено через 28 секунд ни о чём не говорит.Извините.
0
|
Неэпический
|
||||||
10.09.2013, 23:12 | 39 | |||||
ну вот тогда так:
потому что они временные
0
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
||||||
11.09.2013, 16:33 | 40 | |||||
Да, rvalue биндится на константную ссылку и не биндится на неконстантную. Но какими образом из этого следует, что он сам константный?
Добавлено через 2 минуты
0
|
11.09.2013, 16:33 | |
11.09.2013, 16:33 | |
Помогаю со студенческими работами здесь
40
Научить метод принимать в качестве аргумента объект своего класса и дочерних классов Раздельное объявление и описание шаблонной функции, принимающей в качестве операндов ссылку на объект класса "вектор" Создать функцию, имеющую два аргумента и возвращающую в качестве аргумента число из отрезка [a,b] Конструктор, принимающий параметр Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |