2016-08-30 17 views
10

Theo n4487 và các tham chiếu C++ 17 khác, sẽ có thông số hàm lambda mới - constexpr, nếu có "chỉ rõ rằng toán tử gọi hàm là hàm constexpr".. Tôi hiểu động cơ về những biểu hiện liên tục trong lambdas.Constexpr lambda theo mặc định?

4) Nếu specifier constexpr được bỏ qua trong lambda-declarator, các nhà điều hành chức năng cuộc gọi (hay mẫu) constexpr nếu nó sẽ đáp ứng yêu cầu: Điều gì là thú vị đối với tôi điểm 4 của đề nghị trong đó nêu là một hàm constexpr.

Điều này dẫn tôi đến hai câu hỏi:

  1. Tại sao chúng ta cần constexpr specifier? Có vẻ như là liệu toán tử cuộc gọi lambda sẽ là constexpr hay không chỉ phụ thuộc vào thực tế nó sẽ "đáp ứng các yêu cầu của một hàm constexpr", nhưng không phải là từ sự hiện diện của constexpr specifier.
  2. Nếu có thể chấp nhận được constexpr lambda theo mặc định, tại sao nó cũng không được đề xuất cho các loại chức năng khác - ví dụ như chức năng toàn cục? Điều gì sẽ là tác động nếu trình biên dịch bắt đầu xử lý tất cả các chức năng bao gồm các yêu cầu như constexpr?

Trả lời

7
  1. Các constexpr vòng loại làm cho nó một lỗi biên dịch cho lambda vi phạm các yêu cầu của constexpr chức năng. Bạn sử dụng nó khi bạn rõ ràng cần lambda là constexpr, để bạn không vô tình làm cho nó không phải là constexpr.

  2. Asked and answered.

Các vấn đề liên quan