@z1emniak: w 17 linijce przysłaniasz sobie zmienną

liczbaliter
, nie nadając jej wartości, więc otrzymuje wartość losową/śmieciową.
  • Odpowiedz
#programowanie #cpp

Cześć mirki,

czy jest tutaj ktoś kto byłby wstanie napisać program (tylko za plusa ;p) który pobiera wartość, np. 7 i potem pisze choinkę, np. dla wartosci 7:

*
  • 35
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@psi-nos: Najprawdopodobniej zoptymalizuje (świta mi coś w głowie technika optymalizacyjna co się zowie "hoisting" najczęściej stosowana przy optymalizowaniu pętli).

Możemy to sprawdzić, np. tutaj: http://assembly.ynh.io/ (pamiętaj, żeby włączyć opcję optymalizacji).

Po sprawdzeniu w narzędziu podanym powyżej wynika, że kompilator faktycznie nie liczy tej wartości dwa razy, ale stosując trójargumentowy operator warunkowy zyskaliśmy na innej, bardzo ważnej rzeczy: całkowicie pozbyliśmy się branchingu na rzecz instrukcji z rodziny CMOV (co prawdopodobnie da
  • Odpowiedz
@Saguaroniegazowana: Unikać, najlepiej jak ognia. Nie ma takiej sytuacji, w której nie dałoby się ich zastąpić zmienną lokalną/polem klasy.

Nie tyczy się to oczywiście globalnych const'ów.

Ich użycie zwiększa powiązania pomiędzy elementami kodu. W dużym projekcie, takie coś powinno być nie do przyjęcia.
  • Odpowiedz
#programowanie #cpp

Miałem dziś ciekawą przygodę z C++. Może jest mi ktoś w stanie to wyjaśnić.

Tworzyłem instancję jakiejś klasy która miała zwykłe pole typu bool, a w zasadzie strukturę booli. Podczas ustawiania różnych parametrów w metodzie, przyjmijmy, Init(), ustawiałem jakieś wartości dla tych booli. Po wyjściu z metody Init() wykonywał się inny (nie mój) kod, a następnie w kolejnej iteracji pętli głównej programu wywołuję po raz pierwszy kolejną metodę,
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Ginden: @bartoneczek: @progresywnyRegres:

Nie ma takiej możliwości, żeby zagregowana struktura zmieniła adres, jeśli nie zmienił się adres struktury, która ją agreguje. W C++ wszystko siedzi na offsetach i jest po prostu zabite na amen po linkowaniu.

Skłaniałbym się ku wyjaśnieniu @progresywnyRegres: w czym przechowujesz tą strukturę? Bo jeśli w jakimś wektorze/mapie (czyt: na stercie), to jej adres najprawdopodobniej się zmienił. Sprawdź w takim wypadku
  • Odpowiedz
Ok, coś mi się stało z Visual studio.

Jakiś czas temu normalnie pisałem w C, potem w C++ i nie było żadnego błędu. Teraz muszę jakiś program napisać w C.

No i się zaczynają schody.

1.
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

#programowanie #cpp co robię źle jeżeli g++ krzyczy że nie wie jak rzutować obiekt na referencję?

np.

klasa.h:92:21: note: no known conversion for argument 1 from 'klasa' to 'klasa&'


czyżbym
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

The function (.at) automatically checks whether n is within the bounds of valid elements in the vector, throwing an out*of*range exception if it is not (i.e., if n is greater or equal than its size). This is in contrast with member operator[], that does not check against bounds.
  • Odpowiedz
Z drugiej strony używanie operatora tablicowego pozwala pisać taki kod, w którym jesteś w stanie zamienić wektor innym kontenerem, czy nawet zwykłą tablicą.


@noisy: A uƶywanie iteratora pozwoli na uƶycie tego samego kodu jeśli tylko

::value_type
się zgadza ;)
  • Odpowiedz