Referenz, konstante Referenz, rWert-Referenz oder konstante rWert-Referenz übergeben?

Ich habe gelernt, durch Nachschlagen zu bestehen, und hier ist der Test, den ich gemacht habe:

#include <iostream>

using namespace std;

int i = 0;

//If this is uncommented, compiler gives ambiguous definition error.
//void paramCheck (string s) {
//  cout << ++i << ". Param is var.\n";
//}

void paramCheck (const string& s) {
    cout << ++i << ". Param is const ref.\n";
}

void paramCheck (string& s) {
    cout << ++i  << ". Param is non-const ref.\n";
}

void paramCheck (const string&& s) {
    cout << ++i  << ". Param is const rvalue-reference.\n";
}

void paramCheck (string&& s) {
    cout << ++i  << ". Param is non-const rvalue-reference.\n";
}


int main(int argc, char **argv) {
    //Function call test
    paramCheck("");

    paramCheck(string{""});

    string s3{""};
    paramCheck(s3);

    const string s4{""};
    paramCheck(s4);

    //Illegal
    //string& s{""};
    //paramCheck(s);

    const string& s5{s3};
    paramCheck(s5);

    string&& s6{""};
    paramCheck(s6);

    //Illegal
    //const string&& s{s1};
    //onstFP(s);

    //Reference test
    string a = s3;
    a = "a changed s3";
    cout << s3;

    {
    string& b = s3;
    b = "b changed after assigning s3\n";
    cout << "s3 is now " <<s3;

    b = s4;
    b = "b changed after assigning s4\n";
    cout << "s3 is now " <<s3;
    cout << "s4 is now " <<s4;
    }

    cin.get();
    return 0;
}

Und hier ist das Ergebnis, das ich bekomme:

1. Param is non-const rvalue-reference.
2. Param is non-const rvalue-reference.
3. Param is non-const ref.
4. Param is const ref.
5. Param is const ref.
6. Param is non-const ref.
s3 is now b changed after assigning s3
s3 is now b changed after assigning s4
s4 is now

Meine Frage ist:

Übergeben wir einen konstanten Ausdruck, löst dieser immer eine nicht konstante rWertreferenz aus? Unter welcher Bedingung wird eine konstante rWert-Referenz ausgelöst (und warum löst s6 diese nicht aus?)

Warum sind nicht konstante Referenz und konstante rWert-Referenz unzulässig?

Ich habe erwartet, dass a s3 nicht ändern kann, aber warum kann b im inneren Bereich s3 ändern? Wenn das Zuweisen eines neuen Objekts s3 zu b eine neue Referenz ist, warum, wenn ich ihm s4 zuweise und s3 geändert wurde und s4 danach leer ist?

Tut mir leid, dass Sie zu viele Fragen gestellt haben ... Ich werde die Punkte erhöhen, wenn alle Fragen beantwortet sind :) Die Referenz bringt meine Verwirrung vom Zeiger auf eine ganz neue Ebene.

Ich weiß nicht, wie ich den Punkt erhöhen soll. Warten Sie also 2 Tage, bis Sie eine Prämie erhalten, und wählen Sie dann die Antwort aus.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage