nach der Post r-value causes a warning without the use of std::move, Ich frage mich, ob der folgende Code Verhalten nicht definiert hat, hat:Enthält der folgende Code Verhalten undefiniert aufgrund r-Wert Verwendung
struct Animal
{
virtual void foo() const
{
std::cout << "error" << std::endl;
}
};
struct Dog : public Animal
{
void foo() const
{
std::cout << "wuff" << std::endl;
}
};
struct A
{
A(const Animal& a) : _a(a) {}
void foo()
{
_a.foo();
}
const Animal& _a;
};
int main()
{
A a(Dog{});
a.foo();
}
Auf meinem Rechner ist der Ausgang (wie erwartet) wuff
.
Kennen Sie eine Lösung oder einen Workaround? –
@abraham_hilbert: Nimm den Wert mit const Zeiger: 'A (const Animal * p): a _ (* p) {}'. Das macht es * viel * schwerer, versehentlich die Adresse von prvalue zu übergeben. –