2016-05-17 11 views
6

Nó không phải là rõ ràng với tôi cho dù thời gian tồn tại của một đối tượng tạm thời sẽ được mở rộng bằng cách gắn nó vào một tham chiếu const trong một: biểu hiện:Là thời gian tồn tại của đối tượng tạm thời C++ được tạo trong?: Biểu thức được mở rộng bằng cách liên kết nó với tham chiếu const cục bộ?

class Foo {...}; 

Foo *someLValue = ...; 

const Foo& = someLValue ? *someLValue : Foo(); 

là tuổi thọ của tạm được tạo ra bằng cách gọi constructor mặc định Foo() mở rộng bằng cách liên kết nó với tham số const cục bộ mặc dù ràng buộc có điều kiện? Hoặc điều này tạo ra một tham chiếu lơ lửng vì giá trị tạm thời của Foo() sẽ bị hủy ở cuối biểu thức?:?

Trả lời

5

Trong mã này, toán hạng thứ hai và thứ ba của toán tử điều kiện có các loại giá trị khác nhau (lvalue và prvalue).

Điều đó có nghĩa là kết quả của toán tử điều kiện là giá trị của loại Foo, biểu thị đối tượng tạm thời được sao chép-khởi tạo từ toán hạng đã chọn.

Tham chiếu liên kết trực tiếp với đối tượng tạm thời này và do đó thời gian tạm thời được kéo dài.

Ghi chú:

  • Các tài liệu tham khảo không bao giờ liên kết trực tiếp đến *someLValue, thậm chí cũng không để Foo().
  • Tạm thời được khởi tạo từ Foo() là bối cảnh sao chép bản sao để bạn không thể quan sát tạm thời trong trường hợp này.
  • Tạm thời không phải là const mặc dù tham chiếu là const.
Các vấn đề liên quan