|
|
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Вот небольшой пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. b1 begin constructor class A constructor class B b1 end b2 begin b2 end Не пойму почему объект b2 не создается, где тут ошибка? компилятор gcc version 4.0.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 14:05 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
А зачем так писать? B<A> b2(A()); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 14:12 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
maytonА зачем так писать? B<A> b2(A()); Так что в этой строке не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 14:15 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Похоже что компилятор воспринимает строку B<A> b2(A()); как объявление прототипа функции, которая принимает тип A (*)() , т. е. указатель на функцию, возвращающую А, и возвращает тип B<A> Но разве такое поведение компилятора правильное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 14:27 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Sandro_KНо разве такое поведение компилятора правильное? Именно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 14:33 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
ZrenBy Sandro_KНо разве такое поведение компилятора правильное? Именно Получается что в конструктор невозможно передать объект не создавая временного объекта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 14:40 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Честно говоря... даже не знаю. Могу предположить, что конструктор срабатывает раньше чем вход в процедуру main. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 14:51 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Sandro_KПолучается что в конструктор невозможно передать объект не создавая временного объекта?жжош ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 14:57 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Получается что в конструктор невозможно передать объект не создавая временного объекта? так работает: B<A> b2 = A(); или так: B<A> b2( static_cast<A>( A() ) ); возможно, еще как-нить.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 14:58 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
временный объект, разумеется, создается по-любому вот только skope различный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:00 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
а ты добавь ещё ~A(){std::cout << "destructor class A\n"; } и смотри, какой творится пир духа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:09 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
maXmo Sandro_KПолучается что в конструктор невозможно передать объект не создавая временного объекта?жжош И в чем я тут отжог? Че-то до меня не доходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:10 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Sandro_KВот небольшой пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. b1 begin constructor class A constructor class B b1 end b2 begin b2 end Не пойму почему объект b2 не создается, где тут ошибка? компилятор gcc version 4.0.2 У меня тоже есть вопрос: Почему компилятор пропустил такую инициализацию b2? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:20 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
onstat- Sandro_KВот небольшой пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. b1 begin constructor class A constructor class B b1 end b2 begin b2 end Не пойму почему объект b2 не создается, где тут ошибка? компилятор gcc version 4.0.2 У меня тоже есть вопрос: Почему компилятор пропустил такую инициализацию b2? Да при дальнейшем использовании b2 программа действительно не компилируется и выдает ошибку, именно так я понял что компилятор считает b2 прототипом функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:25 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Sandro_KИ в чем я тут отжог? Че-то до меня не доходитне понимаешь, почему несозданный объект нельзя никуда передавать? И ваще, да, бросай писать прогу: зачем, ведь её можно уже юзать, не написав ни строчки кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:32 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Голенков Владимирвременный объект, разумеется, создается по-любому вот только skope различный Ну например если писать B<A> b2 = A(); или B<A> b2( static_cast<A>( A() ) ); то временных объектов будет меньше чем если писать A a; B<A> b1(a); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:33 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
maXmo Sandro_KИ в чем я тут отжог? Че-то до меня не доходитне понимаешь, почему несозданный объект нельзя никуда передавать? И ваще, да, бросай писать прогу: зачем, ведь её можно уже юзать, не написав ни строчки кода. Судя по этому посту в данном вопросе ты понимаешь меньше меня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:37 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
весёлый ты человек! Временных объектов меньше будет... а если так? B<A*> b2(new A()); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:39 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
maXmoвесёлый ты человек! Временных объектов меньше будет... а если так? B<A*> b2(new A()); Не понимаю при чем тут данный пример ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:44 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Sandro_K Голенков Владимирвременный объект, разумеется, создается по-любому вот только skope различный Ну например если писать B<A> b2 = A(); или B<A> b2( static_cast<A>( A() ) ); то временных объектов будет меньше чем если писать A a; B<A> b1(a); Если правильно создать конструкторы копирования и присваивания то временных обьектов будет меньше, а еще можно закрыть сразу кучу проблем которые потом могут вылезти с деструкторами и памятью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:47 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
то временных объектов будет меньше imho, зависит от компилятора VS2005: b1 begin constructor class A constructor copy A constructor copy A constructor class B b1 end b2 begin constructor class A constructor copy A constructor copy A constructor class B b2 end g++ (GCC) 3.2.3 (mingw special 20030504-1): b1 begin constructor class A constructor copy A constructor copy A constructor class B b1 end b2 begin constructor class A constructor copy A constructor class B b2 end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:47 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
maXmo Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:49 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Голенков Владимир то временных объектов будет меньше imho, зависит от компилятора VS2005: b1 begin constructor class A constructor copy A constructor copy A constructor class B b1 end b2 begin constructor class A constructor copy A constructor copy A constructor class B b2 end g++ (GCC) 3.2.3 (mingw special 20030504-1): b1 begin constructor class A constructor copy A constructor copy A constructor class B b1 end b2 begin constructor class A constructor copy A constructor class B b2 end А у меня вот так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. constructor class A copy constructor class A copy constructor class A constructor class B b1 end b2 begin constructor class A copy constructor class A constructor class B b2 end b3 begin constructor class A copy constructor class A constructor class B b3 end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:53 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Походу gcc оптимизирует вызовы конструкторов копирования круче чем MS VC мож в vc надо оптимизацию включить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:58 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
А у меня вот так оптимизация... чтобы было везде одинакого надо делать B(const T &x); а не B(T x); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 15:58 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Голенков Владимир А у меня вот так оптимизация... чтобы было везде одинакого надо делать B(const T &x); а не B(T x); Согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 16:05 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Sandro_Kfunction(A());а что, это верный синтаксис? У меня конструктор вызывается, значит, объект создаётся. Если ты используешь объекты класса как reference-type, ты должен всё делать через указатели, если как value-type, объявляй copy construstor'ы и используй как value-type и без интенсивного вызова copy construstor'ов не обойтись - в этом суть value-type. Либо то, либо другое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 16:47 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
maXmo Sandro_Kfunction(A());а что, это верный синтаксис? Да это совершенно верный синтаксис. Он верный и если функчия объявлена так void function(A a); и если так void function(const A& a) причем если в функцию объект передается по значению, то компилятор(по крайней мере g++) соптимизирует вызов и не создаст временный объект а сконструирует объект сразу внутри функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 17:22 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
maXmo Sandro_Kfunction(A());а что, это верный синтаксис? Немного прогнал, при передачи по ссылке если внутри функции создается копия переданного объекта, то компилятор тоже соптимизирует вызов и конструктор копирования вызываться не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 17:33 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
В разделе 12.2 Temporary objects написано, что такая штука зависит от реализации - компилятор не обязан уменьшать количество временных объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 11:52 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
и продолжать интенсивно юзать конструкторы копирования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 11:54 |
|
||
|
Где глюк?
|
|||
|---|---|---|---|
|
#18+
Временных объъек в данном случае всегда будет только один. И это независит от того, что там напишешь снаружи (если конечно специально объекты не плодить), это зависит от сигнатуры данной функции - она принимает параамет по значению, значит один раз объект скопируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 00:11 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2030025]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
176ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 475ms |

| 0 / 0 |
