形参匹配问题
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
//请大神说说这几个函数形参的异同,个人很迷惑,特别是引用:为什么不进行int *& 到const int*&的转换
void test_1(const int* a)
{
cout<<*a<<endl;
}
void test_2(const int*& a)
{
cout<<*a<<endl;
}
void test_3(const int* const & a)
{
cout<<*a<<endl;
}
void test_4(const string& a,const string& b)
{
cout<<"const_string"<<endl;
}
int main()
{
int* a=new int(8);
string s("abc");
const string ss("const");
test_1(a);
test_2(a);
test_3(a);
test_4(s,ss);
return 0;
}
[解决办法]
void test_1(const int* a) { cout<<*a<<endl; } //这是指针,int型指针
void test_2(const int*& a) { cout<<*a<<endl; }//这是引用,int *型引用
void test_3(const int* const & a) { cout<<*a<<endl; }
//表示指针指向的int数是const类型,这里引用也是const类型,防止被修改
void test_4(const string& a,const string& b) { cout<<"const_string"<<endl; }
//两个都是string类型引用,为什么加const,理由同上,防止被更改
[解决办法]
楼上都介绍完了。 C++有类型检查
C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。
const_cast
static_cast。
dynamic_cast
reinterpret_cast
[解决办法]
++
[解决办法]
int* const &
你的理解错了,arm 是一个const 的引用, 引用的是一个指针(非常量),这个指针指向一个int对象。
为什么不能将 int* a作为实参赋给一个授受const int*&类型形参的函数?
这个问题,我感觉上面说的2个函数能说清楚了。const int*& 要求接受的是一个非const的引用(而不是你想的const的引用),这个引用是一个const int*类型。而你传的是int *a,这个是一个int*类型,而形参要求的是const int *类型的(非常量)引用。
你自己写代码想一下int* const & a和const int* & a的区别。主要是const修饰位置区别。这2个区分了,就清楚知道为什么这样。