Wpis z mikrobloga

@Sachees: konkatenacja to łączenie ze sobą wyrażeń, zwrotów, słów - stringów. W przypadku gdy chcemy połączyć stringa z innym typem to dodatkowo potrzebna jest zmiana typu na string (konwersja). Niestety w tym przypadku nie zadzieje się to automatycznie i int jest traktowany jedynie jako przesunięcie w danym stringu (napisie).
  • Odpowiedz
@zly_dzien: Dzięki, przetestowałem już sobie ;)
Kilka lat z dala od języków, gdzie trzeba samemu zarządzać pamięcią i zapomina się o takich przyjemnościach :D
  • Odpowiedz
@Pierwiastek_z_Czech: Masz dwa napisy:
1. "x = " -4 znaki
2. "y = &x = " - 10 znaków

W pamięci są ułożone zapewne jeden za drugim(cout to standardowe wyjście procesu, traktowane przez system jak deskryptor pliku). Dla pierwszego cout przesuwamy się o 6 miejsc od początku pierwszego napisu czyli omijamy cały pierwszy napis i pierwsze 2 znaki drugiego więc z drugiego napisu zostaje "= &x =". Za drugim wywołaniem, rozpoczynamy
  • Odpowiedz
@makumbanoob: przesuwanie się w tablicy i w pamięci to to samo, dodając inta do wskaźnika, przesuwasz się w pamięci o rozmiar typu na jaki wskazuje wskaźnik, czyli dla tablicy będziesz się przesuwał po kolejnych elementach tablicy.
  • Odpowiedz
@Pierwiastek_z_Czech: tekst "x = " to nie std::string, tylko const char*, a po dodaniu do niego 6 wyszedłeś poza całego stringa - to jest w c++ niezdefiniowane zachowanie i mogło się stać cokolwiek, więc widok jak na konsoli jest jak zgodny z programem. W praktyce, najprawdopodobniej te dwa teksty których używasz są w pamieci jeden za drugim, więc skoro wyszedłeś poza pierwszy, to wypisał się drugi.
  • Odpowiedz
@Pierwiastek_z_Czech: Tylko taki efekt to trochę przypadek, te stałe napisowe nie muszą być jeden po drugim w pamięci (choć mogą i akurat tu są), inne parametry kompilatora, inny kompilator, inny system i efekt będzie inny.
  • Odpowiedz