【问题标题】:How to avoid performance warning for unique_ptr check in VS?如何避免 VS 中 unique_ptr 检查的性能警告?
【发布时间】:2014-01-09 10:12:51
【问题描述】:

这段代码:

    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。在第一个 cmets 之后,我发现只有在打开公共语言运行时支持 /clr 时才会发生这种情况。我该如何避免呢?

if (a.get() != nullptr)

应该可以,但我认为这不是 unique_ptr 的设计方式,是吗?

【问题讨论】:

  • 我有VS2013,但它没有给我这样的警告!
  • 在 Visual Studio 2010 中构建时没有警告,级别警告设置为“/W4”...
  • 我在 /W3 上编译(添加到帖子中)
  • 不需要.get()if (a != nullptr) 有效。
  • @billz, Johan:我刚刚发现必须打开 /clr 才能收到警告。已添加到帖子中。

标签: c++ visual-c++ unique-ptr


【解决方案1】:

你可以直接使用

if (a != nullptr)

【讨论】:

  • noloader 的答案我猜也是有效的,但我更喜欢这个解决方案而不是丑陋的双感叹号。
【解决方案2】:

您通常可以使用!! 清除 Visual Studio 上的性能警告:

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

很久以前我在 Michael Howard 的博客上读到过它,但我没有参考资料。他在谈论干净的编译和使用编译器而不是关闭警告。

【讨论】:

    猜你喜欢
    • 2016-12-25
    • 2021-02-04
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 2014-03-21
    相关资源
    最近更新 更多