Informacija

Cat c6 4 acert motor

Cat c6 4 acert motor


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Cat c6 4 acert motor 4.2 8

3cat c5 4 mack motor 4.2 8

1cat c5 3,9 dfe 11

2cat c5 4 mack motor 4.2 8

2cat c5 3,9 dfe 11

3mačka c6 4,2 8

4mačka c6 4,2 8

3mačka c6 4,2 8

4mačka c6 4,2 8

4mačka c6 4,2 8

Evo što pokušavam učiniti sa svojim kodom:

for(mačka = 0, mačka<,4, mačka++){

za(i=0, i<,5, i++){

cout <,<, mačka <,<, ":" <,<, " | " <,<, i <,<, " : " <,<, " " <,<, (i+1) <,< , " | " <,<, my_array[i] <,<, " | " <,<, my_array[i+1] <,<, endl,

}

}

Ovo je greška koju dobivam:

pogreška: nekonstantna referenca lvalue na tip 'std::array<,unsigned short,

1ul>,' ne može se vezati za privremeni tip 'const unsigned short *'

Pokušao sam deklarirati niz my_array const, ali i dalje dobivam ovu grešku.

Kako mogu svoj niz učiniti konstantnim i ponavljati ga bez promjene svog niza?

O:

Pokušao sam deklarirati niz my_array const, ali i dalje dobivam ovu grešku

Zbog problema koji su identificirali @John Fultz i @Krishna, ne možete uzeti referencu na pokazivač i promijeniti ga bez promjene njegove vrijednosti. Morate kopirati elemente niza prije nego što ga promijenite i vratite kopiju.

Kako mogu svoj niz učiniti konstantnim i ponavljati ga bez promjene svog niza?

Koristite std::array<,...>,::cbegin(), std::array<,...>,::cend(),

std::array<,...>,::data(), std::array<,...>,::at(index), std::array<,...>,::begin(), std ::array<,...>,::end() ili std::array<,...>,::tip_value{}.

predložak<,std::size_t SIZE>,

std::array<,unsigned short, SIZE>, cat_array(unsigned short*&, my_array){

nepotpisani kratki* mačka = moj_niz,

for(int i=0, i<,5, i++){

mačka[i] = 10,

}

return std::array<,unsigned short, SIZE>,{

mačka

},

}

Ako deklariramo pokazivač na niz i pokušamo promijeniti elemente tog niza pomoću aritmetike pokazivača, ponašanje je definirano implementacijom. Nedefinirano je čuvaju li se izvorne vrijednosti objekta ili ne. Sljedeći primjer to ilustrira:

int* p,

int const my_array[] = {0,1,2,3,4},

const int my_const_array[] = {0,1,2,3,4},

p = &,moj_niz,

*p = 5, // Ovo radi.

p = &,my_const_array,

*p = 5, // Ovo nije.

O:

Odgovor na ovo pitanje ovisi o tome kako se pokazivač mijenja.

Ako se pokazivač prosljeđuje funkciji po vrijednosti, vrijednost pokazivača se kopira u argument funkcije, koji se zatim mijenja. Tako se svi pokazivači u nizu mijenjaju. Ova izmjena utječe na pokazivač, koji sada pokazuje na drugi objekt.

Ako se pokazivač prosljeđuje referencom, prosljeđuje se i sam pokazivač. Tako varijabla pokazivača u funkciji može pristupiti izvornoj memoriji. Međutim, ne može mijenjati sadržaj te memorije, jer se samo na memoriju odnosi kao vrijednost argumenta.

O:

Pretpostavimo da imate kod ovako:

int *niz[5],

for(int i = 0, i <, 5, ++i)

niz [i] = i,

Kao što znate, ovaj kod, na primjer, kada se prevede u asembler, prevodilac će napraviti neku optimizaciju kao što je inline funkcija ili odmotavanje petlje. Prevoditelj može promijeniti vrijednost niza na mjestu.

Ako imate const int *array[5],

Ovo se ne odnosi na ovu funkciju:

void foo(const int *a)

{

int *b = a,

b[1] = 9,

}

jer u ovom primjeru prevodilac ne može ugraditi tijelo funkcije i mora napraviti kopiju a. Ali prevodilac može ugraditi prvu for-petlju vašeg koda.

Ako imate const int *array[5], a pokazivač se prosljeđuje po vrijednosti, tada se konstruktor kopiranja ili konstruktor premještanja uvijek poziva kada obavljate poziv funkcije. Prevoditelj također može ugraditi prvu for-petlju.

Ako imate const int *array[5], a pokazivač se prosljeđuje referencom, tada će postojati kopija niza. Možda biste trebali razmotriti prosljeđivanje adrese niza.

Kao što možete vidjeti, prevodilac će koristiti različita pravila ovisno o kontekstu poziva funkcije, zbog čega tip povratka funkcije mora biti u potpunosti definiran kako bi prevodilac mogao napraviti pravi izbor. C standard kaže sljedeće u 6.9.3.2 paragrafu 6:

Kada se pozove funkcija (6.2.2), osim ako je funkcija a

član klase s virtualnim funkcijama, pozvana funkcija

zajamčeno ima namjenski okvir stog.

Dakle, u vašem određenom kodu možete pozvati foo više puta, što će osigurati da ćete imati kopiju niza. Ali to se neće dogoditi u kodu koji ste objavili u pitanju, pa stoga niz neće imati postavljenu vrijednost.

I u drugim slučajevima, pozivatelj može koristiti funkciju za operacije samo za čitanje, a ako prevodilac ugradi vašu funkciju, niz može postati samo za čitanje. Na primjer, ako to učinite



Komentari:

  1. Durrell

    What would you began to do on my place?

  2. Lir

    Po mom mišljenju, nisu u pravu. Moramo razgovarati. Piši mi na PM, pričaj.

  3. Mckale

    Many thanks for the help in this question. Nisam to znao.

  4. Milap

    What a phrase ... super, brilliant idea

  5. Gokora

    Ja se pridružujem. I naletio sam na ovo.



Napišite poruku

Video, Sitemap-Video, Sitemap-Videos