[C++]一些很基本的知识

The basic of basic

cin,cout,cerr,clog

作用域运算符 ::

while(cin >> data)

返回的是istream,但存在istream到bool的类型转换,读入失败或结束时相当于false

引用运算符 &

文件重定向

helloworld <infile>outfile

静态/动态数据类型语言

动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远不给任何变量指定数据类型,该语言会在第一次赋值给变量时,在内部将数据类型记录下来,比如PythonRuby就是一种典型的动态类型语言。

静态类型语言与动态类型语言相反,它的数据类型是在编译期间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表。


无符号数衡正

指定字面值的类型

增加前后缀 wchar_t ch= L'c';

变量初始化

函数体外,初始化为0;函数内置型变量不被初始化。

声明

extern int num; //可能在别处定义


变量和基本类型

复合类型

声明语句 = 基本数据类型 + 声明符

如“int *p”,“*”为声明符

引用:别名,必初始化,与对象绑定,可直接修改,操作同步。

指针:void指针,转换类型后才能操作

int *p;

int *&r = p;

理解r的类型,从右向左阅读r的定义,离r最近的&有直接影响,故r为引用,是一个指针的引用



int i = 42;
int *p;
int *&r = p;
r = &i;           //另p指向i
*r = 0;           //将i的值改为0



const

必须初始化,不能修改

使用extern共享访问

extern int bufSize = init();

extern int bufSize;

不能作为一般常量的引用

int &r = bufSize;

常量引用范围很广,可以有类型转换

int i = 42;
const int &r1 = i;
const int &r2 = 43;
const int &r3 = r1 * 2;
int &r4 = r1 * 2;         //错误!


常量对应常量指针,看这个例子

int num = 10;
const int connum = 100;
int *const r1 = &num;        //r1一直指向num
const int *r2 = &connum;     //指向常量对象的指针

称r1为顶层常量,表示指针本身是个常量,r2为底层常量,表示指向的对象是个常量。


constexpr

将变量或指针定义为顶层常量,可以使用constexpr函数来初始化constexpr函数,

constexpr int size();

constexpr in sz = size();

constexpr引用也能绑定到局部静态变量上。

constexpr定义的指针,只对指针有效,对指针指向的变量无效。

vs不支持这一关键字


类型别名

typedef double newdouble, *douptr; //doubptr等价于double *

using newdouble = double; //vs2010不支持??

注意:

typedef char *pchar;

const pchar pstr = 0; //一个指向char的常量指针

const char *pstr = 0; //一个指向const char的指针


auto

自动识别变量类型

auto i = 0; //type(auto) == int

忽略顶层常量,额外添加const

const int num = 10;

const auto i = num;

auto j = num, *n = &num; //错误,前后不一致


decltype

decltpye(X) sum = Y; sum的类型与X相同,X甚至可以为函数,此时sum类型即为X的返回值类型。

X若为解引用操作,如

int i = 10, *p = &i;

decltype(*p) c;

此时c的类型为int&。

另外,对于decltype((X)) c,无论X为什么,c的类型都是引用,必须初始化。

预处理器

头文件包含的唯一性

#ifndef MY_HEADER_H
#define MY_HEADER_H
#include<iostream>
int main()
/*
 *   ......
 */
#endif




你可能感兴趣的:(C++,基本知识)