Wpis z mikrobloga

@NevilX: tak bardzo nieprawda.

#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;
}
@zwei: zresztą deklaracja funkcji musi określać typ parametrów w C++, nie defaultuje się do inta jak w C, więc podwójna nieprawda.
@zwei: Doszedłem do wniosku, że na bank ktoś się dopierdzieli i będę musiał tłumaczyć. A nie chcę tłumaczyć, więc usunąłem wpis. Ale nie zdążyłem.

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
@NevilX: xD no luz.

Nikt nie powiedział, że te dwie rzeczy podane przez OPa występują obok siebie, ani że value to nie może być typ.


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.
@C10H15N: Niestety, język C++ zawiera trochę ciemnych zakamarków. Usilnie próbują być naprawiane, a wychodzi.... jeszcze gorzej.

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 .
Pobierz b.....n - @C10H15N: Niestety, język C++ zawiera trochę ciemnych zakamarków. Usilnie p...
źródło: comment_lhgh1tCp4yvU1u2DoPKfuq37xdTQ7TL4.gif