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;
}
  • Odpowiedz
@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.
  • Odpowiedz
@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
  • Odpowiedz
@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.
  • Odpowiedz
@C10H15N: drugi przypadek może być "The most vexing parse" o ile value jest typem.

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)
  • Odpowiedz
@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 .
b.....n - @C10H15N: Niestety, język C++ zawiera trochę ciemnych zakamarków. Usilnie p...

źródło: comment_lhgh1tCp4yvU1u2DoPKfuq37xdTQ7TL4.gif

Pobierz
  • Odpowiedz