【发布时间】: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