C++笔记-0(C++基本问题,对C的拓展)

时间:2022-09-09 19:44:14

一、命名空间

C的命名空间
只有一个全局作用域。调用1.dll时,一下子调到3.dll了。
C++提出命名空间
namespace A
{
int a=0;
}
namespace B
{
int b=0;
namespace c:
{
};
}


二、实用性加强

C++随时定义变量
C99也这样做了。

三、register关键字增强

请求编译器将变量啊,直接放入寄存器里面。
register int a= 0;
在C语言中,寄存器没法取地址。
但C++可以。因为为了兼容,C++支持register关键字,但C++要自己做优化了,&a时,直接无视掉。

四、变量检测增强

int a;                    int a =100;
int a = 100;    或   int a;
这样在C语言是可以的输出a都是100;
但在C++会报错。


五、struct类型增强

struct A{};
C语言认为是一组类型的集合。所以使用时,要:
struct A a;
C++认为是一种新的类型。这么些就行:
A a;
并且在结构体可以加pulic等修饰。能完成与class一样的功能。

六、更强力的检测

C++的变量函数都必须有类型,这种情况C++不能用了,
但是老C编译器可以:
g(i)
{
return 5;
}
f()
{}
g(10);
f(1,2,3,4,5);
注:这些在新C标准也不能用;

七、新增的bool类型

sizeof(bool);//就一个字节
bool b =10; // It is 1 or  0 that bool is.
cout<< b ;//cout is 1;
but
muti bool maybe in the same byte;
C语言后来也加了


八、三目运算符

(a<b ? a:b) = 30; //   left operand must be 1-value 表达式不能做左值
C里面表达式返回的是一个值,一个数会报错。

但C++中表达式返回的是变量本身。
int a =10;
int b =20;
(a<b ? a:b) =30;
这样就可以给a赋值30了。说明表达式返回了一个内存空间。(内存首地址,指针)
*(a<b ? &a:&b);//这样就完成了那个工作,建议多用这种写法