Seit wann in C++ int i {1]; möglich?

OP (Firma: https://img.favpng.com/23/21/3) #5738809
Lesenswert?

seit wann ist das möglch?
Ich habe hier etliche Cüü Bücher..und in einem, habe ich das heute 
gsehen, und weshalb man unbedingt immer {} benutzen soll!!
ISt es echt so, das C ständig Spielraum für Diskussionen hat, die völlig 
sinnfrei sind?
Wieso geht es überhaupt ohne{} wenn es doch gefährlich ist, das zu tun?!

In Basic, Pascal etc ist das meiste so.und fertig, es hat alles einen 
Grund.
Wieso wird die Freiheit in C C++ Fehelr zu machen  immer als Vorteil 
verkauft?
Beitrag #5738814 wurde von einem Moderator gelöscht.
OP (Firma: https://img.favpng.com/23/21/3) #5738833
Lesenswert?

noch eine dumme Antwort..also haben wir jetzt zwei sinnfreie kommentare 
und keinen sinnvollen.schon toll dieses Forum

Genauso
 Anstatt eine Initialisierung mit dem Gleichheitszeichen durchzuführen, 
kann in C++ auch eine Klammer verwendet werden. Das obige Beispiel sähe 
in dieser Syntax so aus:

int Einkommen(0);



erklärt wieso hier auch () geht und welche Vor oder Nachteile das 
hat..steht natürlich nicht da..
OP (Firma: https://img.favpng.com/23/21/3) #5738844
Lesenswert?

Und das der Mod diese Frage als Trollfrage bezeichnet, sagt sicher eine 
Menge über dessen C++ Kenntnisse...
Offenbar muss er jetzt erstmal selber nachschlagen um zu raffen, weshalb 
die Frage gar nicht mal so trollig ist...arm...

habs gerade mal getestet..scheinbar ist
int a = 1;
und
int a = (1);

tatsächlich gleichwertig..aber eben nicht
int a = {1};

das ist offenbar wirklich die bessere Lösung, nur finde ich das 
kaum..selbst die angeblichen C++ Schlaumeier schreiben offenbar meist i 
= 1;
OP (Firma: https://img.favpng.com/23/21/3) #5738858
Lesenswert?

Wer wissen will, was anders ist..
1
#include <iostream>
2

3
using namespace std;
4

5
int a = {1.3};
6
int b = (1.3);
7
int c = 1.3;
8

9
int main()
10
{
11
    cout<<("Die Variable lautet %d",a);
12

13
    return 0;
14
}

Bei {} wird geprüft ob es überhaupt zulässig ist..in diesem Fall meldet 
er einen Fehler, das 1.0 kein Int ist...bei allen anderen Lösungen merkt 
der Compiler nicht mal das die Zahl fehlerhaft ist....fatal..was mal 
wieder die Sicherheit von C++ angeht..dher halt die Frage, weshaln es 
ohne {} überhaupt zulässig ist und somit das viele einfach ohne nutzen 
ohne sich des Problems bewusst zu sein
OP (Firma: https://img.favpng.com/23/21/3) #5738873
Lesenswert?

genau das ist ja meine Kritik..aber der Mod bezeichnet sowas als pro 
Pascal trollen oder sowas...wie gesagt..mag jeder selber seien Meinung 
zu so einem Mod haben...
Ich denke jemanden der das als normal..bezeichnet hat nie wirklich mit 
Borland Pascal 6 oder 7 oder neuer gearbeitet
Ich denke es war ihm auch gerade nicht so bewusst..
Du kannst es hier testen
https://www.onlinegdb.com/online_c++_compiler#
Sorry, sehe gerade int i = {1.9}; ist falsch..müsste dann ohne = sein

Achne!!! ja stimmt.auch diese Varitaionen gehen..schon geil dieses C...
Beitrag #5738880 wurde von einem Moderator gelöscht.
#5738883
Lesenswert?

So ein dummes Geschwafel. Wenn man keine Ahnung von C++ hat, nur meckert 
und den anderen Forenteilnehmern eine derartig grausige Orthographie und 
Rechtschreibung zumutet, braucht man sich nicht über die Antworten zu 
wundern.

(Die gewellten roten Linien im Testfenster des Webbrowser haben übrigens 
eine Bedeutung...)

Zum Thema
1
int b = (1.3);
2
int c = 1.3;

Sind beides ganz normale Initialisierungen mit impliziter Typumwandlung.
Und natürlich kann man dem Compiler sagen, das er eine Warnung 
ausspucken soll, wenn man das macht:
1
andi@...:/tmp$ g++ -c -Wconversion -o test.o test.cc
2
test.cc:1:9: warning: conversion to ‘int’ alters ‘double’ constant value [-Wfloat-conversion]
3
 int i = 1.5;

Wenn dort nicht "int" stehen würde, sondern eine Klasse, dann wären die 
beiden Zeilen jedoch:

- Rufe Konstruktor 'b' auf
- Rufe den Zuweisungsoperator von 'b' auf
1
int a (1.3);

(Man beachte das fehlende '=') entspricht eher Instanzierung des 
Datentyps "int", bei fundamentalen Datentypen ist das identisch zu den 
oberen beiden, bei echten Klassen jedoch:

- Rufe Konstruktor von a auf mit Parameter (1.3)

Auch hier ist implizite Konvertierung möglich.
1
int d {1.3};

Nennt sich Listeninitialisierung und ist historisch für Arrays gedacht, 
kann man seit neuestem aber auch für einzelne Variablen verwenden. Aber 
ein paar implizite Konvertierungen sind in dieser
Notation nicht mehr zulässig. Ist im Standard eben so definiert.
OP (Firma: https://img.favpng.com/23/21/3) #5738886
Lesenswert?

1. bin ich Legasterniker..tut aber überhaupt nichts zur sache..aber 
hauptsache labern..ha tmit dem Thema nämlich 0 zu tun!
Spar Dir jetzt zu erklären das ich so lange korriegiren könnte bis die 
Linien weg sind..ist nicht Deine Baustelle!


Und für den Rest der Erklärung ..danke
Was C dennoch nicht sympathischer macht..sondern mir nur wieder zeigt, 
das die Kritik daran berechtigt ist
Moderator Persönliche Seite #5738910
Lesenswert?

Thomas M. schrieb:
> bin ich Legasterniker.

Das hindert dich nicht daran, deine Beiträge vor dem Absenden zumindest 
nochmal Korrektur zu lesen. Dann würden dir vielleicht Dinge auffallen, 
wie zwei Klammern, die nicht einmal ein Paar bilden. Da du dich ja 
gerade an den verschiedenen Varianten von Klammern hochziehst, ist das 
in diesem Falle durchaus nicht gerade unwesentlich.

Außerdem kannst du dich in deinen Schreibereien ja nicht einmal 
festlegen, ob du nun C oder C++ meinst. Beides sind trotz ihrer 
ähnlichen Syntax zwei völlig verschiedene Sprachen, was sich eben auch 
gerade an dieser Stelle zeigt.

Auch der Rest deiner Beiträge dieses Threads erweckt nicht den Eindruck, 
dass du dir beim Abfassen sonderlich viel Mühe gegeben hättest, und 
deine Wortwahl hinterlässt eben bei einem Außenstehenden nicht den 
Eindruck, dass es dir um sinnvolle Antworten, sondern nur um irgendein 
Herummotzen geht. Dann brauchst du dich über die Antworten, die du 
bekommst, auch nicht weiter wundern.

Leute mit vernünftig gestellten Fragen bekommen hier in aller Regel auch 
vernünftige Antworten.
OP (Firma: https://img.favpng.com/23/21/3) #5738919
Lesenswert?

"Leute mit vernünftig gestellten Fragen bekommen hier in aller Regel 
auch
vernünftige Antworten."

ich denke das sehen seeehr viele Leute ganz anders..das Forum ist nicht 
für vernünftige Antworten oder guten Umgangston bekannt..

Des weitern hat es dennoch nicht in Offtopic zu tun..wenn der Fehler mit 
der Klammer so dramatisch ist, hätte man es ja editieren können, als 
Ersteller kann ich das jetzt nicht mehr!!
Persönliche Seite #5738921
Lesenswert?

Thomas M. schrieb:
> Und das der Mod diese Frage als Trollfrage bezeichnet, sagt sicher eine
> Menge über dessen C++ Kenntnisse...

Nein. Dein Eröffnungsbeitrag war so schlampig dahingerotzt, daß nur mit 
viel Mühe überhaupt erkennbar ist, worum es Dir gegangen sein könnte.

Meine C++-Kenntnisse mögen bescheiden sein (nie behauptete ich 
gegenteiliges), aber Deine Fähigkeiten, einen Sachverhalt zu 
formulieren, sind absolut unterirdisch.

Auch Deine angebliche Legasthenie, die Du vorschützt, ändert nichts 
daran. Es geht nicht um eine simple Rechtschreibschwäche.
Beitrag #5738924 wurde von einem Moderator gelöscht.
Beitrag #5738927 wurde von einem Moderator gelöscht.
Beitrag #5738945 wurde von einem Moderator gelöscht.
Beitrag #5738972 wurde von einem Moderator gelöscht.
#5738982
Lesenswert?

Falls es den TO atsächlich interessiert, warum C++ so viele 
Möglichkeiten der Initialisierung von Variablen hat, dann wird das z.B. 
Hier erklärt:
https://m.youtube.com/watch?v=7DTlWPgX6zs
(nicht mein Lieblingsredner und nicht ohne Vorkenntnisse verdaubar)

Grundlage ist wie immer, daß Verbesserungen am Sprachstandard nicht 
Jahrzehnte an Sourcecode invalidisieren sollen. Deshalb kommt die neue 
Variant "On Top".
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.