Как избежать производительности предупреждение для Unique_PTR Check в VS?

StackOverflow https://stackoverflow.com//questions/21017224

  •  21-12-2019
  •  | 
  •  

Вопрос

Этот код:

    unique_ptr<int> a;
    if (a) {
        cout << "ASSIGNED" << endl;
    }
.

и даже этот код:

    unique_ptr<int> a;
    if (static_cast<bool>(a)) {
        cout << "ASSIGNED" << endl;
    }
.

вызвать это предупреждение:

warning C4800: 'void (__cdecl *)(std::_Bool_struct<_Ty> &)' : forcing value to bool 'true' or 'false' (performance warning)
with
[
    _Ty=std::unique_ptr<int>
]
.

в Visual Studio 2012 на уровне предупреждения 3. После первых комментариев я обнаружил, что он бывает только если общий язык выполнения / CLR включен.Как мне избежать этого?

if (a.get() != nullptr)
.

должен работать, но я думаю, что это не так, как уникально_ptr был разработан, это было?

Это было полезно?

Решение

Вы можете использовать напрямую

if (a != nullptr)
.

Другие советы

Вы обычно можете очистить предупреждение о производительности на Visual Studio с !!:

unique_ptr<int> a;
if (!!a) {
    cout << "ASSIGNED" << endl;
}
.

Я прочитал об этом на блоге Майкла Говарда давным-давно, но у меня нет ссылки.Он говорил о чистых компилятах и работе с компилятором вместо того, чтобы выключить предупреждения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top