私はコードを持っています:
#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;
}
上記のコードは、パラメーターが const/volatile であるかどうかに基づくオーバーロードを示しています。ただし、パラメーターを から に変更するint&
とint
、コードがコンパイルされなくなり、const/volatile パラメーターの型に基づいてオーバーロードできなくなります。int が参照渡しの場合に const と volatile に基づいてオーバーロードできる理由がわかりませんが、値渡しの場合はそうではありませんか?
EDIT私は参照が何をするかを理解していることを強調する必要があります-参照エイリアスがconstでオーバーロードできる理由がわかりませんが、通常のintはそうではありません。