首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

形参匹配有关问题

2013-01-28 
形参匹配问题#include iostream #include string #include algorithmusing namespace std//请大神

形参匹配问题

#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
[解决办法]
引用
const int* const & 是:对指向常量的常指针的引用,后一个const作用于指针而不是引用

++
[解决办法]
引用:
引用:void test_2(const int* &amp;amp; a) 等于 引用一个const int *指针。
void test_2(int* const &amp;amp; a) 等于 const 引用的 int * 指针,他们不一样的。
所以你写的代码,不能传int * a, 只能传这种 const int * a =……

int* const &amp
你的理解错了,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个区分了,就清楚知道为什么这样。

热点排行