Re: допоможіть початківцю
поясніть детальніше, чому "rvalue" це по вашому lvalue ?
Тому що так каже стандарт, ось чому. Гляньте повідомлення №13:)
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → допоможіть початківцю
Для відправлення відповіді ви повинні увійти або зареєструватися
поясніть детальніше, чому "rvalue" це по вашому lvalue ?
Тому що так каже стандарт, ось чому. Гляньте повідомлення №13:)
ага, значить якщо в обєкта можна взяти адрес, то він також вважається lvalue.
Але в даному випадку це не змінює тривалості життя цього обєкта
Я уже все пояснив.
Не пояснили. Тож по черзі, ще раз: шо "одразу видаляється з пам'яті" в цьому рядку, після повернення цієї функції?
address[0].setAddress(4300, "Ukraine", "Kiev", "Kirovskaya", 99);
В точці {0} ви створили тимчасові змінні, які передаються у функцію setAddress як rvalue.
Проблема rvalue в тому, що як тільки ви вийшли з функції setAddress (точка {1}), вони одразу ж видаляються з памяті!
Тому на момент виклику функції printAddress {2}, ваші вказівники вказуть на мусор!
"Проблема", пане аналитику, тут насправді в тому, шо перш ніж вдягатися в експерта і менторським тоном повчати інших, треба спочатку принаймні переконатися, шо твердження ваші не суперечитимуть дійсності.
Ви не удосижились перевірити той код, перед тим як ганьбитися грати експерта, егеж? Але розумієте, халепа, той код працює і виводить рядки, які не мали виводитися, адже там за вашою "експертною" думкою - "мусор". Якби ви перевірили це, то уникнули б цієї ситуації і вам би не прийшлось вислизати як в'юну з цими вашими "спрощеними" прикладами. Для кого вони спрощені, для вас? Але я вас питав про іншу ситуацію, дивіться вище, я продублював питання.
Більше того, замість "ржати", коли вам вказали на вашу помилку (м'яко кажучи), ви б могли як справжній експерт піти і самокритично перевірити, і переконатися, шо ті рядки лежать в секції .rdata, RO секції. Але ви вибрали ржати...
Сподіваюсь на 2 відповіді, спочатку без компіляції, а потім після компіляції
От. Вам варто самому спочатку так робити - перевіряти власні твердження конпіліруванієм, шоб не ганьбитися. бо я розумію, може ви й справді вважаєте себе big guy в програмуванні, але й з искпердами такого рівня бувають оплошності, особливо якшо вони заносяться трохи .
"Проблема", пане аналитику, тут насправді в тому, шо перш ніж вдягатися в експерта і менторським тоном повчати інших, треба спочатку принаймні переконатися, шо твердження ваші не суперечитимуть дійсності.
Ви не удосижились перевірити той код, перед тим як ганьбитися грати експерта, егеж? Але розумієте, халепа, той код працює і виводить рядки, які не мали виводитися, адже там за вашою "експертною" думкою - "мусор".
Я перепрошую, але мені здається що ви трошки помиляєтесь. Там дійсно буде UB. Undefined behavior не має проблем з компіляцією - іншв річ що це не гарантується завжди.
Там дійсно створюється вказівник на тимчасову пам'ять. Зробіть декілька потоків, або запишіть інші дані за цією адресою. Ви самі все побачите. А використання цієї пам'яті у класі - це стандартне UB
Більше того, замість "ржати", коли вам вказали на вашу помилку (м'яко кажучи), ви б могли як справжній експерт піти і самокритично перевірити, і переконатися, шо ті рядки лежать в секції .rdata, RO секції. Але ви вибрали ржати...
на хамовите звернення отримали відповідну відповідь
а по суті питання - я розібрався з .data і визнаю вашу правоту
Для відправлення відповіді ви повинні увійти або зареєструватися