Float-Werte als Index in einem Array in C ++

7

Kann ein Float-Wert als Index eines Arrays verwendet werden? Was passiert, wenn ein als Index verwendeter Ausdruck zu einem Gleitkommawert führt?

    
Venus 22.02.2010, 12:38
quelle

5 Antworten

10

Der Gleitkommawert wird in int umgewandelt (es kann eine Warnung oder einen Fehler geben, abhängig von der Warnstufe des Compilers)

%Vor%     
alemjerus 22.02.2010 12:39
quelle
9

Ja. Aber es ist sinnlos. Der Gleitkommawert wird auf eine ganze Zahl abgeschnitten.

(Sie können std::map<float, T> jedoch verwenden, aber die meiste Zeit werden Sie aufgrund von Ungenauigkeiten die beabsichtigten Werte verpassen.)

    
kennytm 22.02.2010 12:39
quelle
2

Ein C ++ - Array ist eine zusammenhängende Sequenz von Speicherplätzen. a[x] bedeutet "der x-te Speicherplatz nach dem auf a gezeigt wird."

Was würde es bedeuten, auf das 12.4. Objekt in einer Sequenz zuzugreifen?

    
Crashworks 23.02.2010 10:16
quelle
1

Es wird zu int. gegossen.

    
klew 22.02.2010 12:39
quelle
0

Dies ist ein Fehler. In [expr.sub] :

  

Ein Postfix-Ausdruck gefolgt von einem Ausdruck in eckigen Klammern ist ein Post-Fix-Ausdruck. Einer der Ausdrücke muss den Typ "Zeiger auf T" haben und der andere darf eine Aufzählung ohne Aufzählung oder einen Integraltyp haben.

Mir ist keine Klausel in der Norm bekannt, die besagt, dass die Konvertierung hier stattfinden sollte (zugegeben, ich wäre nicht überrascht, wenn eine solche Klausel existiert), obwohl das Testen mit ideone.com einen Kompilierungsfehler erzeugt hat.

>

Wenn Sie jedoch eine Klasse anstelle eines Zeigers subskribieren - z. std::vector oder std::array - dann hat die Überladung von operator[] die übliche Semantik eines Funktionsaufrufs, und Gleitkomma-Argumente werden in die entsprechende size_type konvertiert.

    
Hurkyl 03.07.2015 19:31
quelle

Tags und Links