Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странное поведение конструктора 
V
    Опции темы
azesmcar
Дата 24.2.2010, 08:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Этот вопрос подробно обсуждался у Саттера, в решении сложных задач. На другом примере, но смысл тот же - тяжкое наследие Си.

Цитата

6.8 Ambiguity resolution

There is an ambiguity in the grammar involving expressionstatements and declarations: An expression statement with a functionstyle
explicit type conversion (5.2.3) as its leftmost subexpression can be indistinguishable from a declaration where the first declarator starts with a (. In those cases the statement is a declaration.


Цитата(Mephisto @  23.2.2010,  15:08 Найти цитируемый пост)
А что в первом случае обозначают скобки?

тут есть один нюанс

Код

A a2(int(k)); // это прототип A a2(int k) - тут скобки игнорируются
A a2(int()); // это прототип A a2(int (*)()); 


Цитата(RatHat @  23.2.2010,  18:37 Найти цитируемый пост)
mes, для особо одарённых советую перечитать мой первый коммент, там написано: "ты НЕ передал никакого фактического параметра"

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

Это сообщение отредактировал(а) azesmcar - 24.2.2010, 09:25
PM   Вверх
RatHat
Дата 24.2.2010, 12:30 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: нет
Всего: 1



Код

A a2( (int()) );
 - даже не компилится (в Билдере, например. gcc у меня нет.) smile Так что извините, это вообще мимо, хотя возможно на gcc оно и компилится, мало ли...
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
azesmcar
Дата 24.2.2010, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(RatHat @  24.2.2010,  12:30 Найти цитируемый пост)
даже не компилится (в Билдере, например. gcc у меня нет.) 

а на компиляторе visual basic не пробовал? smile 

PM   Вверх
mes
Дата 24.2.2010, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(RatHat @  24.2.2010,  11:30 Найти цитируемый пост)
- даже не компилится (в Билдере, например...) smile 

ну вообще- то принято ошибку сообщать, может она у Вас совсем не по теме, а может билдер в этом тожже не соответствует стандарту.

Цитата(RatHat @  24.2.2010,  11:30 Найти цитируемый пост)
gcc у меня нет.

вместо гцц можно воспользоваться этим онлайновским инструментом, вот пример : http://codepad.org/1T7C1BOK
smile

Цитата(RatHat @  24.2.2010,  11:30 Найти цитируемый пост)
Так что извините, это вообще мимо, 

о Билдер у нас стал гарантом правильности ?!  smile тогда мимо smile




--------------------
PM MAIL WWW   Вверх
W4FhLF
Дата 24.2.2010, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



RatHat, вот чего ты споришь я не пойму? Ты был неправ, признай это и не вводи людей в заблуждение. 

Это сообщение отредактировал(а) W4FhLF - 24.2.2010, 15:21


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
mes
Дата 24.2.2010, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



 smile 
Цитата(W4FhLF @  24.2.2010,  13:00 Найти цитируемый пост)
признай это и вводи людей в заблуждение.  

странный призыв  smile 


--------------------
PM MAIL WWW   Вверх
W4FhLF
Дата 24.2.2010, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



mes, очепятка. Был пьян, обещаю исправиться!  smile 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
RatHat
Дата 24.2.2010, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: нет
Всего: 1



W4FhLF, а почему, собственно, я был неправ? 
Я выдал свой вариант видения проблемы - я думал, человек провтыкал передачу значения в конструктор. 
Если речь в итоге шла конкретно о вызове конструктора посредством передачи именно самого типа, а не значения, то это не было указано в изначальном условии. Там вообще просто сказано: "a2 не выводит ничего". Вы поняли вопрос так, я понял иначе. И всё.

В итоге после того, как я предложил этот вариант решения проблемы (передать значение в конструктор), на меня начали гнать, типа я тупой. 
Извините, значит грамотно задавайте вопросы.

--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
azesmcar
Дата 24.2.2010, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(RatHat @  24.2.2010,  18:10 Найти цитируемый пост)
Если речь в итоге шла конкретно о вызове конструктора посредством передачи именно самого типа, а не значения, то это не было указано в изначальном условии. 

Ты можешь передать конструктору тип? smile Только не говори о шаблонах, тут о них ни слова не написано. Это передача значения, а именно int() это есть 0. Проверь сам
Код

std::cout << int() << std::endl;

вот этот код даже C++ Builder откомпилирует. Это передача значения а не типа, а гнать никто не начинал, просто не надо "на пальцах" пытаться обьяснять опытным людям неправильные вещи и предлагать обучиться русскому языку, если твой вариант справедливо сочли ошибочным. В ошибках нет ничего постыдного, на них учаться, но для этого как минимум надо научиться их признавать.

Это сообщение отредактировал(а) azesmcar - 24.2.2010, 18:27
PM   Вверх
RatHat
Дата 24.2.2010, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: нет
Всего: 1



azesmcar, спасибо за внятное объяснение, этого я не знал, если честно.
А тут ни у кого кроме тебя не хватило чего-то для того, чтобы сразу указать на этот нюанс.

Ошибки я признавать умею, если мне их объясняют. Сочли ошибочным - не вопрос. Но ведь никто(кроме тебя, спасибо тебе большое еще раз) не снизошёл до того, чтобы объяснить, правда ?

А начали цепляться к словам - так не вопрос, я так тоже умею.
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
mes
Дата 24.2.2010, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(RatHat @  24.2.2010,  17:46 Найти цитируемый пост)
А начали цепляться к словам - так не вопрос, я так тоже умею. 

я так понял это камень в мой огород, ну я могу напомнить как все было.

Вы предположили что
Цитата(RatHat @  23.2.2010,  13:56 Найти цитируемый пост)
 так ты не передаёшь ему никакого фактического параметра, вот он и не отрабатывает. 

на что получили ответ :
Цитата(mes @  23.2.2010,  13:59 Найти цитируемый пост)
передача "никакого фактического" параметра  тут не причем, вот не меняя "этого никакого" делаем пример работоспособным

после написали то,
Цитата(RatHat @  23.2.2010,  14:16 Найти цитируемый пост)
Ну замечательно, так в итоге ты инициализировал объект, конструктор вызвался.
При передаче параметра происходит та же инициализация, или я неправ?

 смысл которого я не понял о чем и сообщил :
Цитата(mes @  23.2.2010,  14:20 Найти цитируемый пост)
не понял сути вопроса..

на что получил вызывающий ответ, не основанной ни на какой предшествующей аргументации :
Цитата(RatHat @  23.2.2010,  16:38 Найти цитируемый пост)
Ну ты типа написал, что, мол, передача параметров не при чём и всё такое...
В то время, как что твой вариант, что мой, имеют право на существование, ибо в обоих вариантах конструктор вызовется.
Это из сериии 
- 2+2 = 4;
- Нет!!! 2+2 тут не при чём совершенно, я на самом деле 4*1 = 4!
;)

в ответ Вы получили уточнение насчет передачи :

Цитата

не передача, а передача "никакого фактического"

пример, показывающий где Ваше заблуждение :
Цитата


В этой модернизации
Цитата(mes @  23.2.2010,  13:59 Найти цитируемый пост)
A a2 ( (int()) );

 не было добавлено, ничего, что могло бы считаться в Ваших терминах "каким-либо параметром",
но пример стал работоспособным, а это значит, что
Цитата(mes @  23.2.2010,  13:59 Найти цитируемый пост)
передача "никакого фактического" параметра  тут не причем,


и попытка была помочь разобраться в вопросе, но для этого требовалось понять, что именно Вы подразумеваете :

Цитата

кстати не проясните, что значит "никакой фактический параметр"  ? 


ну и лишь в конце показал, что на каждую ехидную шутку можно получить ответ, и специально выделил смайлом оффтопа, чтоб в дальнейшем не отклоняться от темы :
Цитата

 smile 
Цитата

Это из сериии 
- 2+2 = 4;
- Нет!!! 2+2 тут не при чём совершенно, я на самом деле 4*1 = 4!


угу только "перепечатывая"  диалог, упустили в нем первую фразу :
- какой математической операцией сделать из единицы 4 ?


продолжение следует smile


Добавлено @ 19:38
в ответ появился некий оффтопик не очень приятной тонации :
Цитата(RatHat @  23.2.2010,  17:37 Найти цитируемый пост)
mes, для особо одарённых советую перечитать мой первый коммент, там написано: "ты НЕ передал никакого фактического параметра", а не ты "передал никакой фактический параметр". 
Если ты не понимаешь, что значит "не передал никакого фактического параметра", то я тебе сочувствую. 
Мораль, учимся читать или учим русский язык ;)
И скорее первая фраза звучала как : "я вот пытаюсь сделать 4, но у меня не получается. 3+1 работает, а по-другому не работает"



на что получили замечание о неприятности, и мое видение сказанного, также была попытка призвать к возвращению в русло темы :
Цитата(mes @  23.2.2010,  18:07 Найти цитируемый пост)
 избавьте меня и других форумчан, пожалуйста, от подобного рода высказываний, хоть самокритичность и хорошо, и я рад что не боитесь открыто объявить, но такие фразы неприятны сами по себе и отвлекают от темы.
 
 Умейте доказывать свое мнение, а не прятаться за словами.

Цитата(RatHat @  23.2.2010,  17:37 Найти цитируемый пост)
Мораль, учимся читать или учим русский язык ;)

Хороший вывод,  я даже помогу Вам в этом .. smile 
Начнем с 


После опять попзтался вернуться к вашей проблеме, и выявить место вашего заблуждения
[quote]

Цитата(mes @  23.2.2010,  18:07 Найти цитируемый пост)

ну вот и объясните почему в коде

A a2( int() );

НЕ передано никакого фактического параметра и НЕ РАБОТАЕТ
а в 
    
A a2( (int()) );

также НЕ передано никакого фактического параметра и РАБОТАЕТ ?!

ответа на этот вопрос, заметьте который нужен был не мне, а , имхо, Вам, так и не было получено и после еше нескольких незначительных и спадаюших по пылу выпадов, я  получаю :

Цитата(RatHat @  24.2.2010,  17:46 Найти цитируемый пост)

А начали цепляться к словам - так не вопрос, я так тоже умею. 

 smile  smile  smile 

Или может я чего то не правильно вижу иль не заметил ? тогда прошу ту цитату на стол. smile



Это сообщение отредактировал(а) mes - 24.2.2010, 19:39


--------------------
PM MAIL WWW   Вверх
fear
Дата 24.2.2010, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 16.4.2006

Репутация: 1
Всего: 1



думаю, по текущему вопросу все ясно и дабы увести всех от бесполезного флуда, предлагаю обсудить не менее интересную задачу smile умные указатели в соседней теме
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0604 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.