Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hi,

habe gerade Code entdeckt, der prinzipiel sowas hier macht:

bool b = true;
int i = 0;
i += b;[/PHP]

Nach meinem Verständnis ist sowas nicht so toll, da bool ja mit 0 = false und alles andere ist true definiert ist.

Der Wert von i nach der Addition dürfte also undefiniert sein.

Allerdings klappt das Konstrukt zumindest im Debug einwandfrei. Release hab ich jetzt nicht getestet.

Was mich allerdings überrascht: Der VS2005 Compiler wirft hier nichtmal eine Warnung!

Was haltet ihr davon? Sowas sollte man schon vermeiden, oder?

Wenn man eine Liste mit Zweiwertelementen vergleicht, kann man so z.B. gut prüfen, wieviel sich unterscheiden. Aber so programmieren würd ich auch nicht.

Das hat sicher was damit zu tun, dass es in C keinen bool-Datentyp gibt...

Nach meinem Verständnis ist sowas nicht so toll, da bool ja mit 0 = false und alles andere ist true definiert ist.

Der Wert von i nach der Addition dürfte also undefiniert sein.

int i=true; ergibt immer das i den Wert 1 hat

Ich weiß nicht wie der genaue Wortlaut im Standard (um welche Sprache geht es eigentlich?) ist aber festegelt ist das false = 0 ist und true != false.

Daraus ergibt sich zwar das true jeder Wert außer 0 sein könnte, aber das ist zumindest für den Compiler nur andersherum der Fall. Das heißt jeder Wert außer 0 ist true, aber true ist == 1 ;)

Ich weiß nicht wie der genaue Wortlaut im Standard (um welche Sprache geht es eigentlich?)

Kann ja nur C++ sein. bool gibt's in C nicht ;)

Der Final Draft schreibt in 4.5.4:

An rvalue of type bool can be converted to an rvalue of type int, with false becoming zero and true becoming one.

Wohldefiniert und damit portabel ist das also. Trotzdem finde ich

if(B) ++i;[/code]

besser lesbar, vor allem auch deshalb, weil es ohne dieses Spezialwissen verständlich ist. Ein halbwegs moderner Compiler dürfte daraus sowieso denselben Code erzeugen.

  • Autor

Es geht um C++. War mir gar nicht bewusst, dass es hier einen Unterschied zu C gibt. :beagolisc

Okay, also könnte man sich funktional auf den Code verlassen, aber es ist unschön.

Ich bin immer davon ausgegangen, dass true alles ausser 0 sein kann, da bool ja intern wie ein int behandelt wird.

Es geht um C++. War mir gar nicht bewusst, dass es hier einen Unterschied zu C gibt. :beagolisc

Dazu empfehle ich folgende Seite: Incompatibilities Between ISO C and ISO C++

Ich bin immer davon ausgegangen, dass true alles ausser 0 sein kann, da bool ja intern wie ein int behandelt wird.
Der Standard legt nicht fest, wie bool "intern" behandelt wird.

Du musst hier zwischen zwei unterschiedlichen Konvertierungen unterscheiden:

  • Von arithmetisch/enum/pointer nach bool (4.12.1): 0/NULL ist false, alles andere true.
  • Von bool nach int (4.5.4): false ist 0, true ist 1.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.