c++中namespace: | ||||
C++中的标识符cout,cin,都被定义在 std的命名空间内 | ||||
可以用using namespace std;引用该命名空间 | ||||
为了避免程序员在大规模程序设计或引用多个c++库时造成标识符冲突,可以使用命名空间 | ||||
Std是c++标准库的命名空间,如库中iostream,vector | ||||
//register关键字 请求编译器让变量a直接放在寄存器里面,速度快 register i = 0; for( I = 0;i<100;i++) { … }
//在c语言中 register修饰的变量 不能取地址,但是在c++里面做了内容 //1 register关键字的变化 register关键字请求“编译器”将局部变量存储于寄存器中 C语言中无法取得register变量地址 在C++中依然支持register关键字 C++编译器有自己的优化方式,不使用register也可能做优化 C++中可以取得register变量的地址
//2 C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。
//3 早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。
| ||||
| ||||
函数检测增强
| ||||
/* 在C语言中,重复定义多个同名的全局变量是合法的 在C++中,不允许定义多个同名的全局变量 C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上 int g_var; int g_var = 1;
C++直接拒绝这种二义性的做法。 */
| ||||
int main(int argc, char *argv[]) { printf("g_var = %d\n", g_var); return 0; } | ||||
struct类型加强
| ||||
| ||||
C++中所有的变量和函数都必须有类型
| ||||
总结: /* 在C语言中 int f( );表示返回值为int,接受任意参数的函数 int f(void);表示返回值为int的无参函数 在C++中 int f( );和int f(void)具有相同的意义,都表示返回值为int的无参函数 */ | ||||
三目运算符 int main() { int a = 10; int b = 20;
//返回一个最小数 并且给最小数赋值成3 //三目运算符是一个表达式 ,表达式不可能做左值 (a < b ? a : b )= 30;
printf("a = %d, b = %d\n", a, b);
system("pause");
return 0; }
1)C语言返回变量的值 C++语言是返回变量本事 2) C语言中的三目运算符返回的是变量值,不能作为左值使用 C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方 (内部动了手脚 *((a < b ? &a : &b ))= 30;) 注意: 3) 三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用 (a < b ? 1 : b )= 30; 4)C语言如何支持类似C++的特性那? 变量的本质是内存空间的别名,是一个标号。
| ||||
C语言里的const是个冒牌货,可以通过指针间接修改变量值 Const int a = 10; Int *p = NULL: P = (int*)&a; *p = 11; C语言可以成功,C++里面不可以 因为在c++中一旦 变量被const修饰,便会在内存某一区域生成一个键值表
| ||||
只有当执行&或extern时,才会为字面量10分配内存并使p指向其 因此,输出时*p为11,a为10 |