C++ primer 随笔(3)

标准库类型

涉及命名空间的声明分为两种:命名空间指令命名空间声明

using namespace::std;

是命名空间指令,加入该语句后,可使用std中定义的所有标识符

using std::cin;
using std::cout;

命名空间的使用,提供了一种机制使得程序段中变量名不冲突,可将同名变量声明在不同的命名空间内。
是命名空间声明,应注意的是:一个using声明只作用于一个命名空间成员
两者相比之下,命名空间声明要更加安全,因为命名空间指令中的冲突直接覆盖,而命名空间声明遇到冲突给出一个程序错误。
没有使用using声明而直接使用命名空间中名字为限定版本是一种常见错误。

cin读取字符串读到空格,换行,制表为止(只读一个单词)
如果想要读入未知数目的string对象我们通常使用

string word;
while(cin>>word)
{...}

同时,我们也可以使用函数getline读整行文本
函数getline(参1,参2)
其中参1是输入流(从该流的下一行开始读)
参2string(读后保存的位置)
应该注意的是,函数getline不会忽略开头的换行符

string类中string.size()为其大小,string.empty()是否为空。

vector类是一个类模板

vector<string> svec(10,"hi!");

定义了10个字符串,调用第n个与数组方式相同,即svec[n-1],和数组一样不可以越界复制,否则导致缓冲区溢出。

auto

(变量的缺省类型) 用于临时存储变量,具有生命周期,生命期结束后存储空间可以被其他自动变量覆盖使用

static

静态类型,在程序的整个生命周期内都有效

内联声明 inline

内联声明inline只出现在函数声明中,不出现在函数定义中
编译时在调用处用函数体进行替换,节省了参数传递、 控制转移等开销。
内联声明适用于一个代码段不长且被频繁调用的函数
内联函数的声明必须出现在内联函数第一次被调用之前

inline void Swap(int& a, int& b) //由于既是声明也是定义,所以有inline
{   int t; 
     t=a;
     a=b;
     b=t; 
} 
int main() 
{ 
   int a(5), b(10); 
   Swap(a,b); 
   return 0;
}

函数重载

函数重载必须形参不同,个数不同或类型不同
不以形参名与返回值类型区分重载,会重定义报错

数组和指针

数组初始化:函数体外的内置数组,元素初始化为0;函数体内定义的无初始化,若为类类型,则调用一些类时有默认构造函数,若无,则需显式初始化。

string *p1,p2;

这里只将p1声明为指针,p2为string类。
将指针声明写成

string *p1,*p2;

是一种比较好的编程习惯
指针在使用前应初始化

c风格的字符串(以‘\0’结尾的数组)常常容易引起错误,与其相比,string类型更加安全。
动态数组的创建

int *p=new int[10];//new返回首元素地址

对于未知长度的动态数组,我们通常使用:

size_t n=get_size();
int *p=new int[n];

删除数组p对应的语句为
delete [ ] p;
应注意的是:在delete一个指针后,将其置为0为佳。

二维数组作参数

void foo1(int (*matrix)[col])//传参方法一
{...}

void foo2(int matrix[][col])//传参方法二
{...}

这里第一种方法中的()是必需的

main函数中的数组参数

int main(int argc,char *argv[])
{
  cout << argc<<endl;
  cout << argv[0]<<endl;
}

这里的argc是数组长度,数组argv[0]保存的是编译后生成的exe文件的路径

return的类型

void 型:return;
非void型:return 表达式;

应注意的一点是:一定不要返回对局部对象的引用与指针(因为局部对象在函数结束时其内存空间已被释放,这样的返回值会指向一个未知对象的引用或指针)

类中默认构造函数的定义

class Sales_item{
public:
      ...
      Sales_item():units_sold(0),revenue(0.0) {}
} 

创建的所有未初始化的类对象,都被这个函数初始化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值