C++ jest zarąbiste.

Jest sobie pewne API, które implementuje własną klasę Unicode'owych stringów (no ok, zdarza się...).
I te stringi mają funkcję .ToUStr(), która daje dostęp do bufora 16-bitowych znaków dzięki niejawnej konwersji na const unsigned short*.
Napisałem funkcję, która ma przyjmować bufor znaków i chcę ją wywołać przez Funkcja(string.ToUstr()), a dla wygody zrobiłem typedefa i teraz następuje najlepsze:
- jak zrobię typedef unsigned short* Ptr; i potem Funkcja(const Ptr ptr) { }
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@MostlyRenegade: jest prosta zasada. Const aplikuje się do tego co jest po lewej, chyba, że nic nie ma po lewej to wtedy do tego co jest po prawej.

const short* -> zmienny wskaznik na stałą
short const* -> to samo, to tak zwany "east-const",przez niektórych uważany za jedyny słuszny zapis, bo działa logicznie z zasadą "to co po lewej stronie"
short * const -> stały wskaznik na zmienną
short const * const -> stały
  • Odpowiedz
Ciekawe, wygląda na to że twórca #cplusplus zajmuje się HFT w banku inwestycyjnym. O ile Managing Director się czymkolwiek sam zajmuje ( ͡° ͜ʖ ͡°)

what are you working on now? Stroustrup discusses his “day job” as a technical fellow/managing director at Morgan Stanley, where he describes his problem domain as “distributed systems, networking, getting data from A to B under various constraints… I find that
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Amebcio: niekoniecznie, bo nie wiem czy jakakolwiek giełda rozlicza się na tyle szybko, by to miało sens. HFT to głównie Wall Street gdzie od dawna opracowywano protokoły komunikacyjne i rozwiązania mające na celu taką formę handlu.
  • Odpowiedz
Treść przeznaczona dla osób powyżej 18 roku życia...
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@QBA__: kompilator ci dobrze mówi, content jest lvalue referencją, a ty mu przekazujesz rvalue nullptr.
problem w tym, że nie wolno ci zrobić czegoś takiego jak pusta referencja. to, że działa ci teraz, nie znaczy, że zadziała w przyszłości. kompilator jeżeli widzi referencję, to może zrobić założenie, że nie jest ona pusta.

przy agresywnej optymalizacji kompilatora może ona zwracac zawsze true, nawet jak przekażesz pustą referencję:

bool
  • Odpowiedz
@gdziemojimbuspiatka: No kumam, ale ja bym się nie nastawiał że czegoś się nauczysz na uczelni xD To raczej dla papierka robisz. Uczyć się musisz we własnym zakresie, jak juz to się zahartujesz psychicznie xD
Wracając do tematu to która cześc programu nie działa?
Rozumiem że program:
1. Wczytuje dane z konsoli
2. Zapisuje pracowników do pliku
3. Umożliwia ich sortowanie (posortowany wynik ma byc zapisywany do pliku czy tylko wyswietlany?)
  • Odpowiedz
@gdziemojimbuspiatka: z tego co widze to tuż przed sortowanie tworzysz na nowo całą tablicę w lini 136 a potem niby próbujesz ja uzupełnić danymi z pliku, ale robisz to w odwrotnej kolejności, bo zamiast "pracusie[i].nazwisko = linia" masz "linia=pracusie[i].nazwisko" xD
  • Odpowiedz
@heater: Jak to nie działa, jak działa. Po prostu masz „troszeczkę” dużo za wolny komputer.
Mój złomiasty komputer będzie to wykonywał czternaście trylionów siedemset dwadzieścia biliardów pięćset pięćdziesiąt siedem bilionów dziewięćset dwadzieścia pięć miliardów dwieście dziewięćdziesiąt dwa miliony dwieście osiemdziesiąt osiem tysięcy dwieście siedemdziesiąt sześć lat.

  • Odpowiedz
@lionbest: to mamy rozne pojmowanie pojecia zakresu. i tak mialem instalowac VS, wrzucilem kod i wyrzuca blad ktory szybko daje sugestie, ze cos z--------y z zakresem
  • Odpowiedz
'gmacdevice' has a field 'gmacdevice::p_hw' whose type depends on the type 'Gmac {aka volatile}' which has no linkage [-Wsubobject-linkage]

O czym świadczy taki błąd? Pierwszy raz się z tym spotykam. #cplusplus #jezykc

  • 1
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Wyrelworelowany: Masz kolejność wykonywania działań. Kompilator bierze 2 liczby i wykonuje na nich działanie. Jeśli zmienne są różnych typów, następuje niejawna konwersja na ten typ który posiada większą precyzję/zakres. Rozważ te 2 przypadki:
3 * 1.0 / 2
3 / 2 * 1.0
W pierwszym przypadku masz mnożenie int i double. Wynikiem jest double i następuje dzielenie double przez int. Wynik też jest doublem.
W drugim przypadku masz najpierw dzielenie
  • Odpowiedz
Koleżanka dostała zadanie i jak nie zrobi to nie zda do następnej klasy.


@Sumiru: no jak nie umie czegoś co ma umieć, to czemu ma zdać do następnej klasy?
  • Odpowiedz
@Skim25: Ogólnie jest fatalnie :) Oddziel wprowadzanie danych od logiki biznesowej. Niech metody przyjmują argumenty i zwracają wartości. A błąd... no cóż. Sprawdź dokładnie co zwracasz w metodach.
  • Odpowiedz
@Skim25: Nie wiem co Ci się krzaczy, ale zadanie jest żle wykonane. Klasy mają tylko obliczac i przypisywac dane, pobierac dane powinieneś w innym miejscu.

Na pewno powinieneś wyłapać ostrzeżenie podczas kompilacji, że nie zwracasz wartości, choć deklarujesz, że zwrócisz. To zarazem podpowiedź do tego co robisz źle.
  • Odpowiedz