4

Warum nicht der Compiler in der Lage ist char zu int& zu fördern, aber hat kein Problem, wenn es durch Verweis auf const (char zu int const&) vorbei?Pass-by-reference und ganzheitliche Förderung

Beispielcode:

#include <iostream> 
using namespace std; 

void func1(int & i)  { cout << "int &  " << i << endl; } 
void func2(int const & i) { cout << "const int & " << i << endl; } 

int main() { 

    char mychar = 'a'; 
    func1(mychar); // compiler-error 
    func2(mychar); // no error 

    return 0; 
} 

Antwort

4

Dies erlaubt:

char c = 'X'; 
const int& i = c; 

Wir implizit sind c zu int Förderung und Bindung i zu diesem zeitlich begrenzt. Dies kann nicht wirklich zu einem verwirrenden Verhalten führen. i hat den gleichen Wert c tat, es ist nur ein anderer Typ.

Aber was würde passieren, wenn die gleiche Logik mit nicht erlaubt wurden - const:

binden
char c = 'X'; 
int& i = c; 
i = 'J'; 

i kann nicht direkt auf c - es ist die falsche Art. Wir müssten weiterhin c an und int promoten und i an dieses temporäre binden. Aber wenn wir i zuweisen, ändern wir nur das temporäre wir gebunden - c wäre immer noch X. Das wäre unglaublich verwirrend, nicht intuitiv und fehleranfällig. Die Sprache verbietet es also.

2

Promotions und Conversions erstellen Sie ein neues temporäres Objekt. Nicht-konstante Referenzen können nicht an Provisorien gebunden werden.

Verwandte Themen