Các mã sau đây tạo ra cảnh báo C4127 (biểu thức điều kiện là không đổi) trong Visual Studio 2010 (nơi alias_wchar_t là một bí danh cho wchar_t):C4127: biểu thức điều kiện là liên tục
if (sizeof(alias_wchar_t) == sizeof(wchar_t)) // warning occurs here
{
// do stuff
}
else
{
// do other stuff
}
cách thanh lịch nhất để giải quyết này là gì , ngăn chặn cảnh báo?
Giải pháp tốt nhất mà tôi đã đưa ra là xếp thứ tự có điều kiện vào một bool tĩnh và sử dụng điều đó làm điều kiện. Có một số lượng tốt của mã ở trên và dưới if-else, vì vậy tôi quấn toàn bộ điều trong niềng răng để giới hạn phạm vi của biến càng nhiều càng tốt:
// <snip>
{
static bool isSameSize = (sizeof(alias_wchar_t) == sizeof(wchar_t));
if (isSameSize)
{
// do stuff
}
else
{
// do other stuff
}
}
// <snip>
Điều này cảm thấy khá thô mặc dù. Điều này có vẻ như nó phải được giải quyết tại thời gian biên dịch chứ không phải là thời gian chạy, nhưng bộ tiền xử lý không biết về sizeof. Có cách nào sạch hơn, thanh lịch hơn để giải quyết vấn đề này không?
lưu ý: C++ 17 đang xem xét một cái gì đó như 'nếu constexpr' sẽ giải quyết vấn đề này –