Tôi có một lớp tùy chỉnh triển khai operator==
với nullptr
.Tại sao tôi nhận được cảnh báo "đặt tham số nhưng không được sử dụng" khi sử dụng nullptr_t?
Dưới đây là mã của tôi dumbed xuống thành một ví dụ đơn giản:
#include <cstdint>
#include <iostream>
class C {
private:
void *v = nullptr;
public:
explicit C(void *ptr) : v(ptr) { }
bool operator==(std::nullptr_t n) const {
return this->v == n;
}
};
int main()
{
uint32_t x = 0;
C c(&x);
std::cout << (c == nullptr ? "yes" : "no") << std::endl;
C c2(nullptr);
std::cout << (c2 == nullptr ? "yes" : "no") << std::endl;
return 0;
}
Mã này hoạt động như mong đợi nhưng g ++ (phiên bản 6.2.1) mang lại cho tôi những cảnh báo sau đây:
[[email protected] misc]$ g++ aaa.cpp -o aaa -Wall -Wextra
aaa.cpp: In member function ‘bool C::operator==(std::nullptr_t) const’:
aaa.cpp:12:36: warning: parameter ‘n’ set but not used [-Wunused-but-set-parameter]
bool operator==(std::nullptr_t n) const {
^
gì am Tôi làm sai?
LƯU Ý: Tôi đang sử dụng -Wall -Wextra
.
Không thể sinh sản. Không có cảnh báo nào với gcc 6.2.1 –
@SamVarshavchik try -Wall -Wextra. Có thể sao chép trên 6.1 của hộp thư đến: http://melpon.org/wandbox/permlink/OGeniUkFzE8dRP1v – krzaq
Thú vị. Lưu ý rằng bạn có thể câm nó sâu hơn nữa: '#include int main() {std :: nullptr_t n = nullptr; if (n == nullptr) std :: cout << "có"; } ' –