Se una delle funzioni restituiscono un valore di tipo int, può essere un int assegnato?

StackOverflow https://stackoverflow.com/questions/2216889

  •  19-09-2019
  •  | 
  •  

Domanda

Se una funzione restituisce un int, può essere assegnato un valore di tipo int?Non vedo che rende molto senso per assegnare un valore ad una funzione.

int f() {}

f() = 1;

Ho notato che, se la funzione restituisce un riferimento ad un int, è ok.È limitato solo a int?come su altri tipi?o qualsiasi altra regola?

int& f() {}

f() = 1;
È stato utile?

Soluzione

La prima funzione restituisce un numero intero per valore, che è un valore r . Non è possibile assegnare ad un valore di R in generale. Il secondo f () restituisce un riferimento a un numero intero, che è un l-value -. Modo da poter assegnare ad esso

int a = 4, b = 5;

int& f() {return a;}

...
f() = 6;
// a is 6 now

Nota: non si assegna un valore alla funzione, basta assegnare al suo valore di ritorno. Fate attenzione con il seguente:

int& f() { int a = 4; return a; }

Si sta tornando un riferimento a una temporanea, che non è più valido dopo la funzione ritorna. Accesso al riferimento invoca un comportamento indefinito.

Altri suggerimenti

Non è limita a int solo, ma per i tipi primitivi lì non ha senso farlo. E 'utile quando si hanno le classi

Se una funzione restituisce un oggetto per valore, quindi l'assegnazione è possibile, anche se la chiamata di funzione è un rvalue. Ad esempio:

std::string("hello") = "world";

Questo crea un oggetto stringa temporanea, muta, e poi subito la distrugge. Un esempio più pratico è:

some_function(++list.begin());

Non si poteva scrivere list.begin() + 1, perché oltre non è possibile in iteratori lista, ma incremento va bene. Questo esempio non comporta l'assegnazione, ma l'assegnazione è solo un caso particolare della regola più generale "funzioni membro possono essere chiamati rvalues".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top