关于“const”以及引用型变量的几点疑问

xie6682 2004-12-21 04:12:03
1)const Type&作为函数参数类型以及函数返回值类型的作用分别是什么,各在什么情况下使用?
2)const写在函数名之后,函数体之前有什么作用,比如下面这个函数:
int Find(const Type&x)const{
...(以下内容省略)
}
3) template<class Type> void BST<Type>::
Insert(const Type&x,BstNode<Type>*&ptr){
//私有函数:在以ptr为根的2叉搜索树里插入所含值为x的结点,若在树中已经有含x的结点,则
//不插入。注意ptr作为引用参数的作用。
if(ptr==NULL){ //新结点作为叶结点插入
ptr=new BstNode<Type>(x); //创建新结点
if(ptr==NULL){cerr<<"Out of space"<<endl;exit(1);}
}
else if(x<ptr->data) Insert(x,ptr->leftChild); //小于根关键码,从左子树插入
else if(x>ptr->data) Insert(x,ptr->righrChild);//大于,从右子树插入

}
我想问的是“ptr作为引用参数的作用”到底是什么作用???
还有,cerr在什么情况下使用啊,cout<<"/n"和cout<<endl 有什么区别。
4)定义整型变量,指针变量,数组变量之后需要将它们立即初始化吗?
新人发贴,希望各位多多指教,谢谢。
...全文
161 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wujian53 2004-12-21
  • 打赏
  • 举报
回复
我来解释他们没说到的:
const 的保护作用我就不陈述;
重要的是使用const type&使得立即数也可以传入
比如
void func(int &){};
调用void func(1); //error
但是
void func(const int&){}
void func(1); //right
同理
struct A
{
A(int);
};
void func(A &);
func(1);//error
void func(const A&);
func(1);//right;

这是个典型用法, 只要是不需要修改的对象, 最好声明const,避免别人出错;

至于
class
{
int a;
void func() cosnt//这里的const 是告诉别人这个函数不能修改类成员
{
a = 1;//error
}
这也很重要, 说明这个函数是个行为对象,不涉及到属性变化, 对于派生类的扩展很有帮助

};
定义整型变量,指针变量,数组变量之后需要将它们立即初始化吗?
最好这么做, 担不是必须
oyljerry 2004-12-21
  • 打赏
  • 举报
回复
嗯,指针定义的时候就初始化,这样安全性高
sms88 2004-12-21
  • 打赏
  • 举报
回复
4。好的程序书写习惯是在声明时就初始化,但这个并不是要求。
但是指针变量特别要注意了,先初始化就更具有安全性。
比如:char *p=NULL;写成这样子是因为你还不知道*p指向什么,但是先把它初始化为NULL,使得指针更具有安全性
sms88 2004-12-21
  • 打赏
  • 举报
回复
3。cerr表明以下的输出是个错误提示。跟cout一样的,但是使得程序更具有可读性,别的程序员一看就知道是为了输出错误消息
使用cout<<endl后就马上把缓冲区的内容显示在屏幕上,(我们所有显示在屏幕上的信息不是直接输出到屏幕,而是先送给缓冲区,然后缓冲区满,或者清空缓冲区时才会送到屏幕上显示)
而cout<<"\n"还不会马上清空缓冲区
snow810211 2004-12-21
  • 打赏
  • 举报
回复
我知道得也不全,把知道的作回答(也许不准确).
1.const Type &作为函数参数的时候就是说防止函数修改这个参数。

2.const 在函数后面的情况,应该是出现在成员函数定义时候,意思是说定义一个const对象,可以调用这个成员函数,如果不是const函数,则const的对象无法调用。

3.cerr和cout的区别就是,cerr不经过缓冲区,直接输出,cout是从缓冲区输出

4.定义整形变量,指针变量,数组变量之后没有必要立即初始化,但是在使用指针之前应该将其初始化。

其他的俺也不清楚。。。。:)
jin_xiaolu2000 2004-12-21
  • 打赏
  • 举报
回复
const char *buf==char const *buf *buf 是常量

char * const buf buf 是常量,指向的可以改变

const char * const buf 都不能变
sms88 2004-12-21
  • 打赏
  • 举报
回复
1.const Type& 就是向大家声明这个参数在函数中不能改变值。
heroboy2000 2004-12-21
  • 打赏
  • 举报
回复
2)const写在函数名之后,表示此成员函数不修改对象
3)
因为需要ptr=new BstNode<Type>(x); //创建新结点
4)不需要
cerr可以防止输出被重定向
cout<<endl;等于cout<<'\n';cout.flush();

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧