Der folgende Code kompiliert ohne Fehler/Warnungen mit gcc 6.3 (https://godbolt.org/g/sVZ8OH), aber es enthält ein gefährliches undefiniertes Verhalten aufgrund ungültigen Speicherzugriffs unten markiert. Die Ursache ist die implizite Konvertierung in emplace_back. Kann jemand einen guten Weg oder Best Practices vorschlagen, um solche Fehler im Code zu vermeiden?Dangerous implizite Konvertierung in Emplace
#include <iostream>
#include <vector>
struct Foo
{
explicit Foo(const int& i) : i{i} {}
void foo() const { std::cout << i; } // invalid memory access, as i is an invalid ref!!
const int& i;
};
void bar(const double& d) {
std::vector<Foo> fv;
fv.emplace_back(d);
}
„jemand eine gute Art und Weise oder Best Practices vorschlagen kann, um solche Fehler im Code zu vermeiden? " - Vermeiden Sie Referenzen als Mitglieder? –
Foo {d} wird vom Compiler zurückgewiesen, da die Initialisierung von {} implizite Konvertierungen verhindert. – user2736667
@ user2736667 oops, danke, Kommentar gelöscht – Oktalist