gpt4 book ai didi

c++ - "Temporary object"警告 - 是我还是编译器?

转载 作者:可可西里 更新时间:2023-11-01 18:37:21 26 4
gpt4 key购买 nike

以下片段给出了警告:

[C++ Warning] foo.cpp(70): W8030 Temporary used for parameter '_Val' in call to 'std::vector<Base *,std::allocator<Base *> >::push_back(Base * const &)'

.. 在指示的行上。

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!

编译器是 Codegear C++Builder 2007。

奇怪的是,如果 Derived 的构造函数被删除,警告就会消失......是我还是编译器?

编辑:我发现删除警告的唯一方法是类似于此的内容:

Derived * d;
list1.push_back(d = new Derived); // << No warning now...

最佳答案

简单尝试:

list1.push_back(new Derived());

我担心 POD(具有普通构造函数)与非 POD 之间存在一些差异。

编辑:

鉴于代码使用 gcc.3.4.2 (--pedantic) 编译良好,我会说这是一个编译器怪癖。我倾向于 MarkB 解释,即编译器创建一个临时文件,即使我不明白为什么需要它,然后在将它分配给 const& 时提示。 .但我仍然感到困惑。

关于c++ - "Temporary object"警告 - 是我还是编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2905377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com