C++: {} oder ()

Beitrag #5624722 wurde von einem Moderator gelöscht.
Beitrag #5624725 wurde von einem Moderator gelöscht.
Gast #5624744
Lesenswert?

Jim M. schrieb:
> Wenn man solche Fragen noch hat, sollte man sich eher einführende
> Literatur zu C/C++ besorgen.

Genau deswegen kauf ich mir gleich ein Buch

Jim M. schrieb:
> Das kann man in einem Forenpost nicht ernsthaft beantworten.

Wenn du es nicht weist wieso antwortest du dann überhaupt auf meine 
Frage?



Eine kompetente Antwort kommt sicher noch.
#5624773
Lesenswert?

bambam schrieb:
> Jim M. schrieb:
>> Wenn man solche Fragen noch hat, sollte man sich eher einführende
>> Literatur zu C/C++ besorgen.
>
> Genau deswegen kauf ich mir gleich ein Buch

Sehr gut. Dann kannst du es ja dort nachlesen.

> Eine kompetente Antwort kommt sicher noch.

Die steht dann in deinem Buch. Warum willst du hier unbedingt jemandem 
die Mühe machen, das alles nochmal zu erklären?
Persönliche Seite #5624778
Lesenswert?

Rolf M. schrieb:
> bambam schrieb:
>> Jim M. schrieb:
>>> Wenn man solche Fragen noch hat, sollte man sich eher einführende
>>> Literatur zu C/C++ besorgen.
>>
>> Genau deswegen kauf ich mir gleich ein Buch
>
> Sehr gut. Dann kannst du es ja dort nachlesen.
>
>> Eine kompetente Antwort kommt sicher noch.
>
> Die steht dann in deinem Buch. Warum willst du hier unbedingt jemandem
> die Mühe machen, das alles nochmal zu erklären?

Lass die Trolle labern...

In C und C++ grenzen die geschweifte Klammern eine Funktion ein z.B. If, 
while, for, switch usw werden mit {} abgeschossen.

Die runden Klammern brauchst Du z.B. wenn du Werte in einer Funktion 
übergeben willst oder aber auch zum rechnen.

Gruß
Daniel
Gast #5624779
Lesenswert?

Niemand weiß genau, wann welche Klammern eingesetzt werden müssen. 
Normalerweise verwendet man am Anfang nur {} und ersetzt sie dann 
schrittweise mit (), bis sich das Programm kompilieren lässt.
Gast #5624796
Lesenswert?

Daniel V. schrieb:
> Lass die Trolle labern

Genau. Die geschweiften Klammern nach denen der TO fragt sind nämlich 
die, mit denen Arrays oder Strukturen initialisiert werden.

Rund sind die beim initialisieren nur, wenn explizit oder implizit eine 
Funktion dafür aufgerufen wird, z.b. der Konstruktor
#5624797
Lesenswert?

Achim S. schrieb:
> Daniel V. schrieb:
>> Lass die Trolle labern
>
> Genau. Die geschweiften Klammern nach denen der TO fragt sind nämlich
> die, mit denen Arrays oder Strukturen initialisiert werden.
>
> Rund sind die beim initialisieren nur, wenn explizit oder implizit eine
> Funktion dafür aufgerufen wird, z.b. der *Konstruktor*

Nein!
Schau in der Doku nach:

https://en.cppreference.com/w/cpp/language/value_initialization
Gast #5624803
Lesenswert?

> Genau. Die geschweiften Klammern nach denen der TO fragt sind nämlich
> die, mit denen Arrays oder Strukturen initialisiert werden.

> Rund sind die beim initialisieren nur, wenn explizit oder implizit eine
> Funktion dafür aufgerufen wird, z.b. der Konstruktor

Das ist für C++ definitiv falsch.
Gast #5624815
Lesenswert?

Wilhelm M. schrieb:
> Schau mal bei "uniform initialization syntax"  nach

Ich wollte dir mal dafür danken, dass du als erster die Frage gelesen, 
darüber nachgedacht und ein Stichwort genannt hast, nach dem sich auch 
vernünftig suchen lässt. So trivial wie alle tun, ist die Antwort 
nämlich gar nicht.
#5624818
Lesenswert?

nocheinGast schrieb:
> Wilhelm M. schrieb:
>> Schau mal bei "uniform initialization syntax"  nach
>
> Ich wollte dir mal dafür danken, dass du als erster die Frage gelesen,
> darüber nachgedacht und ein Stichwort genannt hast, nach dem sich auch
> vernünftig suchen lässt. So trivial wie alle tun, ist die Antwort
> nämlich gar nicht.

Schön, wenn ich Dir helfen konnte.

Tipp: solche Fragen stellt man am besten bei stackoverflow statt hier 
;-)
#5624830
Lesenswert?

nocheinGast schrieb:
> Ich wollte dir mal dafür danken, dass du als erster die Frage gelesen,
> darüber nachgedacht und ein Stichwort genannt hast, nach dem sich auch
> vernünftig suchen lässt. So trivial wie alle tun, ist die Antwort
> nämlich gar nicht.

Keiner hat hier so getan, als sei es trivial. Ganz im Gegenteil! Gerade 
deshalb wurde ja angeraten, es besser in einem Buch nachzulesen.
#5624844
Lesenswert?

An den Kommentaren von einigen Vorgänger (Trolle ausgenommen), merkt 
man, dass diese die Neuerungen in den C++ Standards noch nicht 
mitbekommen haben. Das soll auch gar kein Vorwurf sein, weil man je nach 
Buch oder sonstiger Quelle gar nicht drauf kommt.

Schau dir sonst mal diesen Vortrag:
https://www.youtube.com/watch?v=7DTlWPgX6zs

Josuttis stellt sich auch die Frage, was man jetzt verwenden soll, was 
aber gar nicht so leicht zu entscheiden ist.
Gast #5624929
Lesenswert?

bambam schrieb:
> Hallo zusammen,
>
> eine Frage zur Initialisierung von Objekten in C++. Wann muss man
> geschweifte Klammern {} einsetzen und wann runde ()?
>
> Ich habe verschiedene Schreibweisen in verschiedenen Quellcodes gesehen
> aber werde nicht so recht schlau draus.

Fang mit Python an, dann musst du dir darüber erst einmal keine Gedanken 
machen.
#5625016
Lesenswert?

Rolf M. schrieb:
> Die steht dann in deinem Buch. Warum willst du hier unbedingt jemandem
> die Mühe machen, das alles nochmal zu erklären?

Mal ehrlich, kauft sich einer im Jahr 2018 noch totes Holz für sowas?

Ich hab zwar auch mit dem AmigaBasic Handbuch angefangen, aber das war 
im letzten Jahrhundert und da war Internet noch in weiter Ferne.

Bei einem Bekannten stehen eine Menge C, C++, JS, Ruby... Bücher im 
Regal - und verstauben. Weil man Infos einfach schneller im Internet 
findet.
#5625154
Lesenswert?

M.K. B. schrieb:
> An den Kommentaren von einigen Vorgänger (Trolle ausgenommen), merkt
> man, dass diese die Neuerungen in den C++ Standards noch nicht
> mitbekommen haben. Das soll auch gar kein Vorwurf sein, weil man je nach
> Buch oder sonstiger Quelle gar nicht drauf kommt.
>
> Schau dir sonst mal diesen Vortrag:
> https://www.youtube.com/watch?v=7DTlWPgX6zs
>
> Josuttis stellt sich auch die Frage, was man jetzt verwenden soll, was
> aber gar nicht so leicht zu entscheiden ist.

Das eigentliche Problem ist, daß Neuerungen wegen der sehr 
verständlichen Regeln "Never break existing code" nie ihre Vorgänger 
vollständig ersetzen. Das Alte bleibt und kann jederzeit als Argument 
gegen die Sprache verwendet werden.
Bei vielen anderen Sprachen kann man auch Leichen ausgraben, wenn man 
will, nur macht man das bei erfolgreichen natürlich lieber.
#5625194
Lesenswert?

Karl K. schrieb:
> Mal ehrlich, kauft sich einer im Jahr 2018 noch totes Holz für sowas?

Wer hat hier was von kaufen erzählt? Bibliotheken sollten immer noch 
existieren - und da kann man IMHO auch einführende Literatur zu C/C++ 
finden.

Karl K. schrieb:
> Weil man Infos einfach schneller im Internet
> findet.

Weil man sich an die Stichworte aus den Büchern erinnert.

Es soll auch noch Menschen geben die längere Texte lieber auf Totholz 
als am Bildschirm lesen.
(Firma: privatfrickler.de) #5625200
Lesenswert?

Hi bambam,

auf eine Sache würde ich dich gern hinweisen.

Die diversen Dokumente über {} vs () weisen manchmal darauf hin, dass 
wenn Du {} benutzt ein Problem entstehen kann, wenn es einen Constructor 
gibt, der std::initializer_list nimmt. Dann führen () und {} zu 
unterschiedlichem Verhalten.

Das ist zum Beispiel bei std::vector der Fall.

std::vector<int>(1000, 42) macht einen Vektor mit 1000 Elementen vom 
Wert 42, std::vector<int>{1000, 42} macht einen Vektor mit den 
angegebenen 2 Elementen.

vlg
 Timm
#5625359
Lesenswert?

Daniel V. schrieb:
> In C und C++ grenzen die geschweifte Klammern eine Funktion ein z.B. If,
> while, for, switch usw werden mit {} abgeschossen.

Stimmt so nicht. Das geht auch ohne {}, wenn nur eine Anweisung folgt. 
Mit {} gilt das if,else, while for ... für den ganze Block von 
Anweisungen zwischen den Klammern.

Runde Klammern umgeben die Bedingungen bei if,while usw sowie die 
Parameter eines Funktionsaufrufes. Außerdem sind sie paarweise optional 
einsetzbar, um den Code übersichtlicher zu machen.
#5625369
Lesenswert?

Man kann so einen Block auch mit runden Klammern machen:
1
#include <stdio.h>
2

3
void hello(int a, int b)
4
{
5
    printf("Hello, numbers are %d and %d\n", a, b);
6
}
7

8
int main(int argc, char* argv[])
9
{
10
    int x, y;
11
    if (argc > 1)
12
    (
13
       x = 5,
14
       y = 3,
15
       hello(x, y)
16
    );
17
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren