Ich habe den Code:Überlastung auf const und volatile - warum funktioniert es als Referenz?
#include "stdafx.h"
#include <iostream>
using namespace std;
void func(const int& a)
{
std::cout << "func(const)" << std::endl;
}
void func(volatile int& a)
{
std::cout << "func(volatile)" << std::endl;
}
void func(const volatile int& a)
{
std::cout << "func(const volatile)" << std::endl;
}
int main()
{
const int a = 0;
const volatile int b = 0;
volatile int c = 0;
func(a);
func(b);
func(c);
system("pause");
return 0;
}
Der obige Code basiert auf zeigt Überlastung, ob die Parameter const/volatil. Wenn ich jedoch die Parameter von int&
zu int
ändere, kompiliert der Code nicht mehr und ich kann nicht basierend auf konstanten/volatilen Parametertypen überladen. Ich verstehe nicht, warum wir auf der Basis von const und volatile überladen können, wenn der int als Verweis übergeben wird, aber nicht, wenn sein Wert überschritten wird?
EDIT Ich sollte betonen, ich verstehe, was eine Referenz tut - ich verstehe nicht, warum ein Verweis Alias auf const überladen darf, aber eine normale int ist nicht.
Könnten Sie näher auf den Unterschied zwischen int und int eingehen? Ich dachte, eine Referenz ist nur ein Alias für eine andere Variable? So sind Int und Int nicht anders? Man meint nur den Alias? – user997112
@ user997112 Wenn Sie Referenzen verwenden, wird keine Kopie erstellt. Wenn Sie Plain Pass-By-Value verwenden, wird das Argument kopiert. –
@ user997112 Ich habe versucht zu erarbeiten.Im Referenzfall sind die Semantiken radikal verschieden. Es ist nützlich, wenn die Sprache separate Überladungen hat. Sie nicht zu haben, wäre verwirrend. – juanchopanza