Rod*_*ddy 7 c++ warnings c++builder
以下代码段给出了警告:
[C++ Warning] foo.cpp(70): W8030 Temporary used for parameter '_Val' in call to 'std::vector<Base *,std::allocator<Base *> >::push_back(Base * const &)'
Run Code Online (Sandbox Code Playgroud)
..在指定的行上.
class Base
{
};
class Derived: public Base
{
public:
Derived() // << warning disappears if constructor is removed!
{
};
};
std::vector<Base*> list1;
list1.push_back(new Base);
list1.push_back(new Derived); // << Warning on this line!
Run Code Online (Sandbox Code Playgroud)
编译器是Codegear C++ Builder 2007.
奇怪的是,如果Derived的构造函数被删除,警告就会消失......是我还是编译器?
编辑:我发现删除警告的唯一方法是类似于此:
Derived * d;
list1.push_back(d = new Derived); // << No warning now...
Run Code Online (Sandbox Code Playgroud)
简单的尝试:
list1.push_back(new Derived());
Run Code Online (Sandbox Code Playgroud)
我担心 POD(带有简单的构造函数)与非 POD 之间存在一些问题。
编辑:
鉴于代码可以使用 gcc.3.4.2 (--pedantic)很好地编译,我会说这是编译器的怪癖。我倾向于MarkB解释,即编译器创建一个临时的,即使我不明白为什么需要它,然后在将其分配给...时抱怨const&......但我仍然感到困惑。