Ich möchte die Kompilierung brechen, wenn das Objekt const deklariert ist.Prüfen ob das Objekt const
Die folgende funktioniert nicht:
#include <type_traits>
struct A {
A() : v(0)
{
static_assert(! std::is_const<decltype(*this)>::value, "declared as const");
}
int& AccessValue() const
{
return const_cast< int& >(v);
}
int v;
};
int main()
{
A a1; // ok, this compiles
const A a2; // no, this break the compilation
a1.AccessValue() = 5; // ok
a2.AccessValue() = 6; // OPS
}
Also, gibt es eine Möglichkeit, die Zusammenstellung zu brechen, wenn ein Objekt dieses Typs const deklariert wird?
Ich bezweifle, dass es möglich ist. Was willst du erreichen? –
Wenn jemand ein 'const A' bekommt, aber nicht sollte, wird der Compiler schließlich Fehler geben, die im Grunde dasselbe sagen (als const deklariert), so dass Sie nicht wirklich nach solchen Dingen suchen müssen. – Shahbaz
@AlexandreC. Es ist UB, const_cast zu verwenden, um von einem konstanten Verweis auf einen nicht-konstanten Verweis zu wechseln, es sei denn, das Objekt wird als nicht-konstant deklariert. Ich muss const_cast verwenden, möchte aber verhindern, dass Leute Objekte dieses Typs const deklarieren. –