Вопрос по с++, Помогите понять суть |
Здравствуйте, гость ( Вход | Регистрация )
Вопрос по с++, Помогите понять суть |
igor_bogomolov |
13.7.2010, 23:34
Сообщение
#1
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Вопрос из теста.
Раскрывающийся текст
Вопрос в тесте такой - сколько раз вызовется конструктор класса A при исполнении функции main. После ответа откомпилируй код для проверки, добавив какой-нибудь std::cout в конструктор A. При первом просмотре (да и при втором, третьем, ...) я предположил, что конструктор вызовится 4 раза. Откомпилировав, получил всего два вызова. Пробовал воспользоваться отладчиком и впал в недоумение. r1 и r2 вообще не создаются, т.е. при компиляции эти строчки игнорируются. Сделал m_name публичным и попробовал обратиться к нему после создания r1. Получил ошибку компиляции Цитата ошибка: запрос элемента ‘m_name’ в ‘r1’, имеющего не классовый тип ‘A(std::string)’ При этом r3 и r4 создаются нормально и обращение к m_name не приводит к ошибке.Помогите разобраться что происходит |
|
|
igor_bogomolov |
14.7.2010, 12:36
Сообщение
#2
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
должен 4 раза вызваться - все 4 раза конструктор копирования (поскольку он явно определён) Где вы увидели конструктор копирования? Он явно не определён.строчки Вы не внимательно прочитали мое первое сообщение. r2 и r4 тоже нигде далее по коду не используются. Тем не менее они не с оптимизированны, как вы это объясните? С r3 вообще икаких проблем нет. Игнорируются r1 и r2.A r1(std::string(v[1])); и A r3(s); проигнорированы оптимизатором, так как эти локальные переменные нигде далее не использованы Цитата(DEADHUNT) Это связано с неоднозначностью, компилятор не может отличить декларацию прототипа функции от объявления переменной. Цитата(DIMEDROLL) 1>\testprocload.cpp(32) : warning C4930: 'A r1(std::string [])': prototyped function not called (was a variable definition intended?) 1>\testprocload.cpp(35) : warning C4930: 'A r2(std::string)': prototyped function not called (was a variable definition intended?) Спасибо, теперь понятно. |
|
|
Текстовая версия | Сейчас: 23.11.2024, 6:34 |