void* nach double casten funzt nicht?



  • hi,
    das hier:

    void *p = (void*)0;
    double a = (double)p;             // <--- error
    double b = (double)(ptrdiff_t)p;  // <--- geht
    

    **error C2440: 'type cast' : cannot convert from 'void *' to 'double'
    **
    (die zeile mit dem // error) geht nicht mit dem c-compiler von vs2005.
    ist das normal? und wenn ja, warum?
    unabhängig davon, wie unsinnig der code ist, aber es wäre ja noch verständlich, wenn der compiler 'pointer truncation' o.ä. warnen würde.
    aber wieso lehnt er's ab?
    🙂



  • Weil der Standard das halt nicht erlaubt (siehe 6.3.2.3).



  • Tim schrieb:

    Weil der Standard das halt nicht erlaubt (siehe 6.3.2.3).

    meinst du das: ?

    Any pointer type may be converted to an integer type.
    

    das schliesst doch nicht aus, dass pointer zu doubles konvertiert werden können, sondern sagt nur, dass eine pointer-to-char/int/long usw. möglich sein soll.
    also ist pointer-to-double unspezifiziert, oder?
    🙂



  • es bedeutet nicht, dass nur pointer to char/int/short usw. erlaubt sind,
    sondern es besagt, dass du einen Zeiger nur in einen int casten kannst!

    das heißt, es darf pointer to double geben, du wirst aber auf normalen Wege nie einen pointer in einen double konvertieren können,
    es sei denn über den Umweg eines ints.
    den ptrdiff_t ist ein int-Typ 😉



  • DrakoXP schrieb:

    es bedeutet nicht, dass nur pointer to char/int/short usw. erlaubt sind, sondern es besagt, dass du einen Zeiger nur in einen int casten kannst!

    mit 'integer types' sind alle ganzzahligen typen gemeint, also char, short, long usw. aber wo finde ich das verbot einer konvertierung von void* nach double?
    🙂



  • das wird bei "Any pointer type may be converted to an integer type."
    einfach impliziert 😉



  • DrakoXP schrieb:

    das wird bei "Any pointer type may be converted to an integer type."
    einfach impliziert 😉

    das kann ich nicht glauben. wenn einer sagt: 'ich kann bzw. darf auto fahren', dann sagt das doch nichts über seine beziehung zu fahrrädern, mopeds oder bobby-cars aus. ich glaube eher, dass die direkte konvertierung von pointern zu doubles im standard nicht erwähnt ist und daher ist es erlaubt, aber nicht bedingung.
    🙂


Anmelden zum Antworten