Tôi có đoạn code:Quá tải trên const và dễ bay hơi - tại sao nó hoạt động theo tham chiếu?
#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;
}
Đoạn mã trên cho thấy quá tải dựa trên việc các thông số là const/dễ bay hơi. Tuy nhiên, nếu tôi thay đổi thông số từ int&
thành int
, mã không còn biên dịch và tôi không thể quá tải dựa trên các loại tham số const/volatile. Tôi không nhận được lý do tại sao chúng tôi có thể quá tải dựa trên const và dễ bay hơi nếu int được thông qua tham chiếu, nhưng không nếu nó được thông qua bởi giá trị?
EDIT Tôi nên nhấn mạnh Tôi hiểu tham chiếu là gì - Tôi không hiểu tại sao bí danh tham chiếu được phép quá tải trên const nhưng int bình thường thì không.
Bạn có thể giải thích về sự khác biệt giữa int và int- Tôi cho rằng tham chiếu chỉ là bí danh cho một biến khác không? Vì vậy, int & và int không khác nhau? Một chỉ có nghĩa là bí danh? – user997112
@ user997112 Khi bạn sử dụng tài liệu tham khảo, không có bản sao nào được thực hiện. Khi bạn sử dụng giá trị truyền theo giá trị đơn giản, đối số sẽ được sao chép. –
@ user997112 Tôi đã cố gắng xây dựng.Trong trường hợp tham chiếu, ngữ nghĩa hoàn toàn khác nhau. Nó rất hữu ích cho ngôn ngữ có quá tải riêng biệt. Không có chúng sẽ gây nhầm lẫn. – juanchopanza