C中的宏一般仅仅是一些常量的定义,可以对应于c++中的枚举。
C语言中printf执行格式化输出,%m.pf执行至少m位保留p为小数的float输出,默认为右对齐的,当在m前添加-后执行左对齐,
由于至少m位的的设定,不会造成值的丢失。只省略p对.的省略情况会造成不同的结果。
scanf具有将不能识别的字符放回原处的特点,对不能识别的字符认为是输入终止的信号。对空白字符的处理也是一样的,连续的空白字符
作为分隔条件会被忽略。
C语言中赋值表达式是有值的,返回所赋的右值。(可用括号进行查看)。
C++中的友元概念是用来突破类的私有保护机制的。默认访问权限为private(友元除外)
即使需要使用默认构造函数,但默认构造函数的声明还是需要给出的,一般这是一个重要的习惯,其原因在于,只有当没有定义任何
构造函数时,C++才会自动提供默认构造函数,给出一个非默认构造函数而用默认方式初始化实例会出错,这种行为应当被避免。
,故 c++ 11 "=default" 可以省去一些工作量。
有关类方法的修饰并不是仅能使用一次(public private ........)
当函数后面加const的形式仅适用于类的成员函数,用于指出该函数不能对类的成员变量进行修改,对"独立"函数是不适用的。
(其余const的意义可猜测)
关键字unsigned(不作为修饰而是一种类型)是为了跨平台考虑。
有3种设定内联函数的方法,(1)类内对函数进行直接定义而非声明,(2)类内给出函数声明但加关键字inline,
(3)类内只给出函数声明,但在类外函数定义前加关键字inline。
这并不限于类的成员函数,对非成员函数,可于(类外)函数定义前添加关键字inline。
一般函数返回值与返回引用的区别在于性能(拷贝与否)。
C++在重载io流的方法时,要返回此io流。
引用与指针的一点不同时,引用在给出时必须初始化,而指针可以不初始化。
引用就是别名,一旦给定,对其的操作就会影响施加引用的对象。
引用一般初始化是对变量进行的,对常量可以考虑const引用。
指针虽然可以未经初始化来使用,但是应该避免(使用nullptr)。
指向指针的指针的初始化方式仍然是对一个引用符号添加双层指针。(仅仅一层)
extern关键字可以使其它文件使用本文件定义的一个变量,以避免重复定义。同时可以仅仅在声明时使用extern,之后在其它文件中直接使用。
const作为修饰符规定对所修饰对象操作的限制,但并不限制修饰对象必须为const类型。
所以这意味着可以对普通变量施加const引用,这时仍可以对原变量进行修改,但这仅仅使对此const引用进行使用是有意义的。
这仅仅是限制了如自增运算这些改变指针本身的运算。
上面的两个const即是所谓顶层const与底层const 如const int const* pN 左边的是底层const(指定被指向的对象)
右边是顶层const(指定指针本身)
指针在初始化是却需要严格地与其类型相一致。
指针的const可以限定为固定的地址,即int * const Num 这时所指向的值仍是可变的。
C++中常量表达式,不仅仅涉及到数据类型,而且与编译有关,是在编译期就可以确定的值。
类型别名:
有两种定义类型别名的方法,typedef 及 using("=" C++11新引用的方法)。
可以使用类型别名对基本类型及不带指针及引用的类型进行指定,对于其它类型容易对类型造成混淆。
auto:由于函数的强类型性,导致即使对于模板函数也无法突破此性质。
可以放心地使用此函数,但需要知道的是其原理是通过初始值来推断类型。
auto有时会忽略掉顶层const (const int N = 100; auto NN = N;)此时需要换成const auto。但需要注意的是这对非auto情况也是适用的。
auto的一大作用是对模板函数中的临时变量的类型进行给出:
如下例:
当*被执行类的操作符重载时尤为方便。
decltype:用一个表达式的类型初始化一个变量的类型(多应用于一个函数与跟其无关的变量间)但并不能用于初始化函数的参数及返回值
的类型。另外decltype也可以直接作用于初始化的的对象(如内置对象实体)等,可以做到与auto等价。
基本完成了基础部分。
C语言中printf执行格式化输出,%m.pf执行至少m位保留p为小数的float输出,默认为右对齐的,当在m前添加-后执行左对齐,
由于至少m位的的设定,不会造成值的丢失。只省略p对.的省略情况会造成不同的结果。
scanf具有将不能识别的字符放回原处的特点,对不能识别的字符认为是输入终止的信号。对空白字符的处理也是一样的,连续的空白字符
作为分隔条件会被忽略。
C语言中赋值表达式是有值的,返回所赋的右值。(可用括号进行查看)。
C++中的友元概念是用来突破类的私有保护机制的。默认访问权限为private(友元除外)
即使需要使用默认构造函数,但默认构造函数的声明还是需要给出的,一般这是一个重要的习惯,其原因在于,只有当没有定义任何
构造函数时,C++才会自动提供默认构造函数,给出一个非默认构造函数而用默认方式初始化实例会出错,这种行为应当被避免。
,故 c++ 11 "=default" 可以省去一些工作量。
有关类方法的修饰并不是仅能使用一次(public private ........)
当函数后面加const的形式仅适用于类的成员函数,用于指出该函数不能对类的成员变量进行修改,对"独立"函数是不适用的。
(其余const的意义可猜测)
关键字unsigned(不作为修饰而是一种类型)是为了跨平台考虑。
有3种设定内联函数的方法,(1)类内对函数进行直接定义而非声明,(2)类内给出函数声明但加关键字inline,
(3)类内只给出函数声明,但在类外函数定义前加关键字inline。
这并不限于类的成员函数,对非成员函数,可于(类外)函数定义前添加关键字inline。
一般函数返回值与返回引用的区别在于性能(拷贝与否)。
C++在重载io流的方法时,要返回此io流。
引用与指针的一点不同时,引用在给出时必须初始化,而指针可以不初始化。
引用就是别名,一旦给定,对其的操作就会影响施加引用的对象。
引用一般初始化是对变量进行的,对常量可以考虑const引用。
指针虽然可以未经初始化来使用,但是应该避免(使用nullptr)。
指向指针的指针的初始化方式仍然是对一个引用符号添加双层指针。(仅仅一层)
extern关键字可以使其它文件使用本文件定义的一个变量,以避免重复定义。同时可以仅仅在声明时使用extern,之后在其它文件中直接使用。
const作为修饰符规定对所修饰对象操作的限制,但并不限制修饰对象必须为const类型。
所以这意味着可以对普通变量施加const引用,这时仍可以对原变量进行修改,但这仅仅使对此const引用进行使用是有意义的。
这仅仅是限制了如自增运算这些改变指针本身的运算。
上面的两个const即是所谓顶层const与底层const 如const int const* pN 左边的是底层const(指定被指向的对象)
右边是顶层const(指定指针本身)
指针在初始化是却需要严格地与其类型相一致。
指针的const可以限定为固定的地址,即int * const Num 这时所指向的值仍是可变的。
C++中常量表达式,不仅仅涉及到数据类型,而且与编译有关,是在编译期就可以确定的值。
类型别名:
有两种定义类型别名的方法,typedef 及 using("=" C++11新引用的方法)。
可以使用类型别名对基本类型及不带指针及引用的类型进行指定,对于其它类型容易对类型造成混淆。
auto:由于函数的强类型性,导致即使对于模板函数也无法突破此性质。
可以放心地使用此函数,但需要知道的是其原理是通过初始值来推断类型。
auto有时会忽略掉顶层const (const int N = 100; auto NN = N;)此时需要换成const auto。但需要注意的是这对非auto情况也是适用的。
auto的一大作用是对模板函数中的临时变量的类型进行给出:
如下例:
template
void Multiply(_Tx x, _Ty y)
{
auto v = x*y;
std::cout << v;
}
当*被执行类的操作符重载时尤为方便。
decltype:用一个表达式的类型初始化一个变量的类型(多应用于一个函数与跟其无关的变量间)但并不能用于初始化函数的参数及返回值
的类型。另外decltype也可以直接作用于初始化的的对象(如内置对象实体)等,可以做到与auto等价。
基本完成了基础部分。