Entwickler-Ecke

C# - Die Sprache - Zuweisungsoperator


Dingo - Mi 05.04.17 11:18
Titel: Zuweisungsoperator
Grüße!

Mal eine Frage zu Zuweiungsoperatoren, warum gibt mir Visual Studio die zweite Zeile als falsch aus:


C#-Quelltext
1:
2:
int value3 = 11;
int value3 <<= 3;

<<= wäre ein ungültiger Ausdruck. Warum? Gehört doch zu den zusammengesetzten Zuweisungsoperatoren.


Delete - Mi 05.04.17 11:49

- Nachträglich durch die Entwickler-Ecke gelöscht -


Ralf Jansen - Mi 05.04.17 12:06

Du hast da nochmal int vorgeschrieben und zeigst damit an das eine Variablendefinition stattfindet. Lass das int weg.

a.) value3 existiert bereits -> ungültig
b.) würde value3 noch nicht existieren würde deine Shift Operation auch schon value3 benutzen um value3 zu setzen. Hieße du benutzt eine Variable bevor sie intialisiert ist -> ungültig


hydemarie - Mi 05.04.17 12:20

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
du benutzt eine Variable bevor sie intialisiert ist -> ungültig


Jein. Variablen haben in der Regel einen Standardwert, und je nach Compiler (und Datentyp (und Programmiersprache...)) wird dann einfach kommentarlos dieser genommen (bei Ganzzahlen ist das meist 0).


Ralf Jansen - Mi 05.04.17 12:36

Zitat:
Jein.


In einem C# Forenordner können wir denke ich davon ausgehen das sich die Frage auf einen C# Compiler bezieht ;) Und der mag sowas nicht auch wenn .Net selbst das erlaubt.


Delete - Mi 05.04.17 12:39

- Nachträglich durch die Entwickler-Ecke gelöscht -


hydemarie - Mi 05.04.17 12:40

Also wenn ich C# da richtig verstehe, gilt:


C#-Quelltext
1:
2:
int? value; // NULL
int value; // 0


Ralf Jansen - Mi 05.04.17 12:49

Jein. Solange du nie wirklich in value reinguckst wird das so sein und das sogar kompilieren ;) (Denn Wert könnte man auch per default(T) Methode ermitteln)

Wenn du value aber benutzt ohne zwischen Definition und Verwendung auch einen Wert zuweist wird der Compiler das ablehnen mit einem 'use of unassigned value' Error.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
// geht 
int value;

// geht nicht 
int value;
Console.WriteLine(value);

// geht
int value;
value = 5;
Console.WriteLine(value);


hydemarie - Mi 05.04.17 12:52

Verdammte Spezifikationen immer. Da lobe ich mir doch C/C++. Da ist so was einfach "undefiniertes Verhalten" und tut vielleicht das Gewünschte und vielleicht nicht.


Ralf Jansen - Mi 05.04.17 12:57

Zitat:
Da ist so was einfach "undefiniertes Verhalten" und tut vielleicht das Gewünschte und vielleicht nicht.


Jupp. In dem Zusammenhang sprechen C++ Entwickler glaube ich immer vom ~mündigen~ Programmierer und füllen sich gegängelt wenn sie daran gehindert werden etwas zu tun von dem sie glauben es besser zu Wissen als der Compiler ;)


hydemarie - Mi 05.04.17 13:03

Deswegen sucht man sich ja auch einen bestimmten Compiler aus. 8)


Dingo - Mo 10.04.17 10:10

Ah ok, danke.^^