in Computing and stuff

Const life

Натъкнах се на поредно ново 20 вчера 🙂
Една от често срещаните грешки, когато човек започва да пише на С++ е код като този :

Псевдоним към temporary, то няма да съществува след като функцията е била извикана и това ще бъде undefined behavior (най-вероятно кофти краш).
Лесно и ясно, но.

В (1) изглежда вземаме ref към temp, и в (2) следва да имаме проблем. Това обаче не е съвсем така.
С++ някъде из стандарта, ясно указва че const следва да удължи живота на temporary-тата 🙂 Без static, без копия.
Така, не само можем да изпълним (2), но (3) също работи.
(4) създаваме нов LoggedString, само за да видим по-късно кога неговият деструктор ще се извика.
Нещо повече, и двата компилатора, които имам дори не ми позволяват да компилирам (6).
Другото което видях, е че не са малко на брой редовете, които трябва да бъдат изписани за да имаме прост клас, дефиниран с всички необходими конструктори …
Output :

Write a Comment

Comment


*