按值与按引用重载函数:如何明确指定调用按引用版本?
明确指定C++重载函数的引用传递调用
问题场景代码
void test(int k){ cout<<"Passed as value"<<endl; cout<<k<<endl; } void test(int &k){ cout<<"Passed as reference"<<endl; cout<<k<<endl; } int main(){ int x = 10; test(x); // 此处会触发歧义错误 }
问题描述
我理解调用函数时编译器无法区分是按值还是按引用传递,因此会出现“call of overloaded ‘test(int&)’ is ambiguous”的歧义错误。请问是否有办法在调用函数时明确指定要按引用传递?注:我已了解通过传递变量地址的解决方法。
解决方法
强制转换为引用类型
用static_cast把变量显式转换成int&,让编译器匹配引用版本的重载:int x = 10; test(static_cast<int&>(x));使用
std::ref包装引用
包含<functional>头文件后,用std::ref生成引用包装器,它会隐式转换为对应引用类型,从而匹配目标重载:#include <functional> // ... int x = 10; test(std::ref(x));先声明引用变量再传递
手动创建指向原变量的引用,再将这个引用传入函数,编译器会直接匹配引用版本:int x = 10; int& ref_x = x; test(ref_x);
内容的提问来源于stack exchange,提问作者Satish Kumar Singh
相关产品推荐
相关产品推荐

