打印

声明和定义问题

[复制链接]
958|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sinadz|  楼主 | 2012-9-20 18:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我一直以为定义是声明+初始化
即int i;是声明
int i =0;是定义
但看侯捷翻译的effective c++上面说string p;也是个定义(在条款定义应该尽量靠后的那节),如果定义过早,就会过早引入构造的负担。
难道我对声明和定义的概念一直有错吗
声明不导致内存分配,那么到底如何区分定义和声明?

相关帖子

沙发
火箭球迷| | 2012-9-20 18:23 | 只看该作者
主要的区别是在 是否分配存储空间

使用特权

评论回复
板凳
txcy| | 2012-9-20 18:30 | 只看该作者
对变量的声明和定义这个说法貌似没有严格的规定!

使用特权

评论回复
地板
gxgclg| | 2012-9-20 18:39 | 只看该作者
string encrypted;
这个从来不会是声明,永远是定义!
因为从这里开始,encrypted已经是一个可以使用的对象了,它已经占用内存了。

此外,
int i;
这个也是定义,它也可以被使用了,它也已经占用内存了(虽然它还没有被初始化,它的值是任意的)。

只有
extern string str;
extern int i;
这两个是引用外部的声明,它不在本翻译单元中占用内存,不是定义。
string不是内建类型,它只是标准库提供的类型(其实它是一个模版类型),C++的标准库是用C++代码写成的,而不是由编译器直接支持的。因此,string有它的构造函数,可以在标准库的源代码中找到。

使用特权

评论回复
5
yybj| | 2012-9-20 18:47 | 只看该作者
变量和对象不加extern永远是定义,类中的除外.
函数只有函数头是声明,有函数体是定义.
类永远只是声明.类成员函数的函数体是定义.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

304

主题

2313

帖子

0

粉丝