2016-03-29 18 views
12

Tôi thấy Q_NULLPTR được sử dụng tự do trong mã nguồn Qt và các ví dụ, nhưng tôi không tìm thấy tài liệu nào cho nó chính xác và khi nào nó nên được sử dụng.Khi nào sử dụng Q_NULLPTR?

Ví dụ trong chính thức demonstration này của mô-đun Qt SerialBus mới được bổ sung trong v5.6 Qt mới:

if (!m_canDevice->connectDevice()) { 
    delete m_canDevice; 
    m_canDevice = Q_NULLPTR; 

đã phục vụ này nhằm mục đích nullptr trước đó được bổ sung trong C++ 11? Nếu vậy, bây giờ chúng ta có C++ 11, tôi có nên sử dụng Q_NULLPTR không?

PS: Tôi đã thử tìm kiếm mã nguồn Qt cho định nghĩa macro nhưng không tìm thấy được.

Trả lời

9

Điều này có phục vụ mục đích nullptr trước khi được thêm vào trong C++ 11 không? Nếu vậy, bây giờ chúng ta có C++ 11, tôi có nên sử dụng Q_NULLPTR không?

Có (hơi) và Không tương ứng.

C++ khá thiếu trong những ngày này, vì vậy Qt có nội dung riêng, sau này trở nên lỗi thời khi C++ cập nhật các tính năng.

Điều đó đang được nói, Q_NULLPTR là (là) không có chức năng giống như nullptr, (như Andrei lưu ý, nếu C++ 11 được hỗ trợ nó mở rộng để nullptr) nó không cung cấp cho bạn sự an toàn loại, chỉ cần cú pháp " đường". Nó minh họa ý định cho người đọc mã, không phải trình biên dịch là nullptr.

13

Q_NULLPTR là macro, được thay thế thành nullptr nếu trình biên dịch hỗ trợ C++ 11 và NULL (được thay thế thành 0) nếu không. Nếu bạn sử dụng C++ 11, bạn có thể viết nullptr thay thế; sử dụng NULL nếu bạn không sử dụng.

+0

Thật tuyệt khi biết – dtech

+5

[Đây là mã nguồn] (https://code.woboq.org/qt5/qtbase/src/corelib/global/qcompilerdetection.h.html#990) trong trường hợp ai đó cần bằng chứng. – thuga

2

Sử dụng Q_NULLPTR để duy trì trình biên dịch độc lập.

Nếu bây giờ bạn quyết định sử dụng nullptr, mã của bạn sẽ không biên dịch bằng trình biên dịch C++ 98 cũ hơn. Nếu bạn quyết định sử dụng NULL, bạn mất an toàn loại C++ 11, ngay cả khi có sẵn trong trình biên dịch hiện tại của bạn.

Vì cùng một lý do macro như qMove(x) và xác định tương ứng Q_COMPILER_RVALUE_REFS tồn tại.

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