2016-03-29 16 views
8

sự khác biệt giữa các biến thành viên là gì:static const vs constexpr thành viên lĩnh vực trong C + + 11/14?

struct my_class { 
    static const int i = 0; 
    static constexpr int j = 0; 
}; 

Nếu hiểu biết của tôi là đúng, tôi có thể sử dụng cả hai ij hằng số thời gian khi biên dịch. Tức là, cả hai std::array<int, my_class::i>std::array<int,my_class::j> đều hoạt động.

+5

có thể trùng lặp của [Sự khác nhau giữa \ 'constexpr \' và \ 'const \'] (http://stackoverflow.com/questions/14116003/difference-between-constexpr-and-const) –

+0

Sau khi đọc câu hỏi đó, tôi vẫn không thể tìm ra câu trả lời cho câu hỏi của mình :-) – amin

+0

@HumamHelfawi tôi muốn biết sự khác biệt khi tạo thành constexpr là tĩnh. đó là một chút khác biệt. – amin

Trả lời

7

Không có sự khác biệt đối với các thành viên của loại tích phân hoặc liệt kê (như trong ví dụ của bạn). Đối với tất cả các loại khác, biểu thức hằng số require constexpr:

một giá trị trái-to-rvalue chuyển đổi (4.1) trừ khi nó được áp dụng cho

  • một glvalue non-volatile của thiếu hoặc liệt kê kiểu đó đề cập đến một đối tượng const không bay hơi hoàn chỉnh với khởi tạo trước đó, được khởi tạo với biểu thức không đổi hoặc [...]
  • glvalue không bay hơi đề cập đến đối tượng không bay hơi được xác định với constexpr hoặc đề cập đến không thể thay đổi đối tượng phụ của một đối tượng, hoặc [...]
Các vấn đề liên quan