Aktywne Wpisy
PierdekAlonso +214
Jeszcze do niedawna mówiłem, że PiS straci poparcie dopiero wtedy gdy Kaczyński zostanie przyłapany na seksie z księdzem. Dzisiaj patrząc na sondaże po aferze w sprawie funduszu sprawiedliwości wiem już, że PiS nigdy nie straci poparcia. Nie ma takiej rzeczy, która sprawiłaby że te 30% żelaznego elektoratu nie zagłosuje na PiS, po prostu nie ma.
Mam już dość tej zasranej demokracji i tego, że głos ludzi z tak bardzo wypranym mózgiem jest
Mam już dość tej zasranej demokracji i tego, że głos ludzi z tak bardzo wypranym mózgiem jest
enron +225
słucham państwa
#programowanie #cpp
Komentarz usunięty przez autora
#include
struct A
{
int bar;
A(int bar) : bar(bar)
{
}
void foo()
{
std::cout << "bar=" << bar << "\n";
}
};
int value = 1;
A a(value);
int main(void)
{
a.foo();
return 0;
}
W komentarzu napisałem, że drugie to deklaracja funkcji.
#include
struct Object {};
typedef Object value;
Object obj(value); //<---o tu jest
Object obj(value val)
{
std::cout<<"jeste funkcjom";
}
int main()
{
obj(Object{});
}
Nikt nie powiedział, że te dwie rzeczy podane przez OPa występują obok siebie, ani że
Niby tak, ale z kontekstu wynika, o co chodzi. Więc to nie ja się dopierdzielam tutaj w sumie. Znaczy ja też, ale nie ja zacząłem.
Pomijając powyższe, różnica jest taka, że kompilator nie wykona niejawnego rzutowania:
int d(1.0); // Ok
int e{2.0}; // To się nie skompiluje (dla -std=c++1x)
Jednym z takich zakamarków jest inicjalizacja zmiennych. Jedną zmienną można inicjalizować na baaaardzo wiele sposobów (stanowczo zbyt wiele). U ciebie, oba zapisy są równoważne.
W twoim kodzie masz dwa różne sposoby inicjalizacji, które zrobią dokładnie to samo - wywołają konstruktor przyjmujący typ value.
Pierwszy to tzw. brace initialization ("inicjalizacja klamrami"), szerzej opisana tutaj: https://en.cppreference.com/w/cpp/language/aggregate_initialization .