2016-03-23 9 views
3

Ich lese Scott Meyers Effective C++ 3..
In Artikel 3:In Effective C++ Punkt 3, warum Verwendung static_cast <const TextBlock- &> (* this) statt static_cast <const TextBlock-> (* this)?

Verwendung const wann immer möglich. Um konstante Elementfunktion Operator zu verwenden [], nicht konstante Elementfunktion operator [] hat 2 Guss Operationen zu tun:

const_cast<char&>(
    static_cast<const TextBlock&>(*this) 
     [position] 
) 

Warum verwendet Scott Meyers static_cast<const TextBlock&>(*this) statt static_cast<const TextBlock>(*this)?

+1

... denn das kopieren würde? – Columbo

+1

Mögliches Duplikat [Unterschied zwischen statischen \ _cast (\ * this) und statischer \ _cast (\ * this)] (http://stackoverflow.com/questions/3802556/difference-between-static-castconst-athis- und-statisch-Castconst-athis) – anderas

Antwort

2

static_cast<const TextBlock>(*this) wird ein temporäres Objekt erstellen, die von *this kopiert wird. Und dann operator[] wird auf sie aufgerufen werden, und die zurück char& wird baumelt, wenn operator[] aus der nicht-const Member-Funktion gehen. Beachten Sie, dass die Dereferenzierung zu UB führt.

Verwandte Themen