2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
1 | ||||||
Оператор присваивания по умолчанию25.11.2014, 15:36. Показов 2743. Ответов 15
Метки нет (Все метки)
0
|
25.11.2014, 15:36 | |
Ответы с готовыми решениями:
15
Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * Оператор присваивания оператор присваивания оператор присваивания |
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||
25.11.2014, 15:45 | 2 | |||||
Что есть мусор?
0
|
25.11.2014, 15:47 | 3 | |||||
С чего вы так решили? Все нормально копируется.
MrGluck, мусор - без инициализации:
0
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
25.11.2014, 15:53 [ТС] | 4 |
VS 2013: ошибка компиляции. Хочу понять согласно какой строке стандарта. Или это VS защищает меня от "неловких ситуаций в дальнейшем", но почему не Warning, а ошибка компиляции.
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||
25.11.2014, 15:58 | 5 | |||||
Я вначале тоже попробовал без инициализации приравнять, также всё ок.
Я, возможно, кэповскую вещь скажу, но компилятор когда не находит явно объявленного оператор присваиваний делает что-то типа этого:
указатель lhs = указатель rhs. В итоге, два указателя будут указывать на одну и ту же область памяти и есть риск, что произойдёт ошибка с попыткой повторного освобождения памяти. Добавлено через 1 минуту Наверняка, стоит флаг /WX Свойства проекта > C/C++ > Treat Warnings As Errors.
1
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
25.11.2014, 15:59 | 7 |
0
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
25.11.2014, 16:05 [ТС] | 8 |
Проверил c:
Yes (/WX) No (/WX-) стоит по умол No (/WX-) Добавлено через 3 минуты Всем спасибо за помощь, соглашусь с Ilot, в стандарте ничего не нашёл про это, поэтому это MS решило помоч нам. И никак не отключить ошибку компиляции )))
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||
25.11.2014, 16:28 | 9 | |||||
Сейчас посмотрел - да, для свойств классов они генерируют ошибку компиляции. Но можно отключить в Exceptions в Native Run-Time Check(сейчас найду как до этого меню дойти) и возможно ещё кое-где. Напишу инструкцию попозже.
Добавлено через 31 секунду Но это поведение точно не по стандарту и является инициативой MS. Ilot прав. Код достаточно обрамить макросами
А ещё лучше - правой клавишей по проекту > Properties > C/C++ > Code Generation > Basic Runtime Checks > выбрать Stack Frames (/RTCs) Добавлено через 1 минуту http://msdn.microsoft.com/en-u... sb93x.aspx
1
|
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
|
|
25.11.2014, 17:39 | 10 |
В С++ копирующий оператор присваивания, определенный компилятором, никогда ничего не копировал "побитово". Концепции "побитового" копирования на уровне ядра языка в С++ просто нет.
Это warning, а не ошибка компиляции. А erorr он стал потому, что где-то в настройках проекта вы специально попросили, чтобы этот warning стал erorr. Вопрос лишь - где. Эти установки управляют проверками времени выполнения, а в данном случае речь идет об ошибке времени компиляции. Строка стандарта тут очень простая. Чтение значения неинициализированного объекта приводит к неопределенному поведению.
1
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
25.11.2014, 17:49 | 11 |
У них такое идёт независимо от флага Treat Warnings As Errors.
sdl проверки ещё выключить. Просто даже при их выключении он в рантайме пробует проверить.
0
|
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
|
|
25.11.2014, 18:32 | 12 |
Это у кого - "у них"? Я только что попытался скомпилировать этот же код VS 2013 Update 4. Никакого error я не получил. Только warning C4700.
В моем случае я попробовал включить SDL проверки. Но warning остался warning-ом. Так что что именно у ТС там такое еще включено (если не warnings as errors) я не знаю. Добавлено через 12 минут ТС надо показать нам командную строку cl.exe из свойств проекта. Там все должно быть видно.
0
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
25.11.2014, 18:48 [ТС] | 13 | |||||
0
|
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
|
|
25.11.2014, 21:26 | 14 |
Дело в SDL.
Происходит вот что: при включенном SDL этот warning превращается в error, но только в Win32 конфигурациях. В x64 кофигурациях включение SDL такого эффекта не имеет: warning остается warning. Я у себя пробовал именно в x64 конфигурации, поэтому и не заметил такого эффекта от SDL.
1
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
25.11.2014, 23:16 | 15 |
Дефолтный - почленно.
Грубо говоря, для каждого члена класса вызывается operator=
0
|
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
|
|
25.11.2014, 23:37 | 16 |
0
|
25.11.2014, 23:37 | |
25.11.2014, 23:37 | |
Помогаю со студенческими работами здесь
16
Оператор присваивания. Оператор присваивания Оператор присваивания Оператор присваивания Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |