2017-03-25 1 views
3
string three() { return “kittens”; } 

const string four() { return “are an essential part of a healthy diet”; } 

Gemäß Artikel this ist die erste Zeile ein veränderbarer R-Wert, während der zweite ein konstanter Wert ist. Kann mir jemand erklären, was das bedeutet?Was ist der Unterschied zwischen einem modifizierbaren rvalue und einem const rvalue?

+0

Offensichtlich, weil Kätzchen aufwachsen und Katzen werden. – Yakk

+2

Mit dem ersten können Sie z.B. 'three() [0] = 'K'', mit der zweiten Funktion kann man sowas nicht machen. –

+0

die Namen sagen schon alle. Einer ist const der andere nicht. – user463035818

Antwort

3

Die Rückgabewerte Ihrer Funktion werden mit dem Kopierkonstruktor von std :: string kopiert. Das können Sie sehen, wenn Sie mit einem Debugger durch Ihre Programmausführung gehen.

Wie die Conments sagen, ist es ziemlich selbst erklärend. Der erste Wert kann bearbeitet werden, wenn Sie ihn zurückgeben. Der zweite Wert wird schreibgeschützt sein. Es ist ein konstanter Wert.

Zum Beispiel:

int main() { 


    std::cout << three().insert(0, "All ") << std::endl; // Output: All kittens. 

    std::cout << four().insert(0, "women ") << std::endl; // Output: This does not compile as four() returns a const std::string value. You would expect the output to be "women are an essential part of a healthy diet”. This will work if you remove the const preceding the four function. 

} 
+0

Sind Sie sicher über 'vo(). Begin(), four.end()'? Das wären Iteratoren für verschiedene 'std :: string', oder? – Zereges

+0

@Zereges. Amendiert. – 0xDEFACED

0

Ein rvalue ist derjenige, der auf der Schreibseite eines Zuweisungsoperators geschrieben werden kann. A Änderbarer R-Wert ist der Name (wie aus dem Namen ersichtlich), dessen Wert während der Ausführung jederzeit geändert werden kann. Andererseits ist const Rvalue eine Konstante, die während der Programmausführung nicht geändert werden kann.

Verwandte Themen