这里顺便回顾一下C中的知识:,今天小编就来说说关于布尔型数据只有两个值?下面更多详细答案一起来看看吧!
布尔型数据只有两个值
1)布尔类型- bool a = false;
- cout << a << " " << boolalpha << a << endl;
- /*
- bool 布尔类型:
- true为真,false为假
- 任何基本类型都可以隐士转换为bool类型
- 非0即真,0即假
- boolalpha -> 相当于一个开关,表示开,打印true和false
- noboolalpha -> 表示关,关闭后打印 0||1
- */
这里顺便回顾一下C中的知识:
- a = *("abc" 3); // 0->a 1->b 2->c 3->\0
- cout << a << endl;
- /*
- 这三种意思相同
- a = *("abc" 3);
- a = "abc"[3];
- a = 3["abc"];
- */
内联 inline: 和#define很像
就是用已被编译好的二进制代码,替换对函数的调用,避免调用开销(栈区到代码区的调用)
使用inline关键字期望该函数被优化内联,不过是否内联由编译器决定
内联函数的缺点:inline会使占用内存变大
另外!复杂的函数和递归不可以用内联,因为递归是调用自己,会占用非常大非常大的内存空间。
- inline int Max(int a,int b){
- return a>b?a:b;
- }
- int main()
- {
- Max(10,20);
- return 0;
- }
重载:同一作用域,函数名相同,参数表不同的函数
重载和形参名无关
不同作用域同名函数遵循临近隐藏原则
重载和返回类型无关
参数表不同:1.类型不一样 2.数目不一样 3.顺序不一样
- void foo(){
- cout << "void foo();" << endl;
- }
- void foo(int a){
- cout << "void foo(int a);" << endl;
- }
- void foo(int a,int b){
- cout << "void foo(int a,int b);" << endl;
- }
- void foo(int a,double b){
- cout << "void foo(int a,double b);" << endl;
- }
- void foo(double a,int b){
- cout << "void foo(double a,int b);" << endl;
- }
- int main()
- {
- foo();
- foo(1);
- foo(1 , 2);
- foo(1 , 3.14);
- foo(3.14 , 1);
- }
那么!问题来了!编译器是怎么区别函数的重载的呢?
其实,我们起的函数的名字编译器会给我们改掉
我们在Linux下用nm命令查看一下C 编译器给函数取的名字
- # nm 2.out
- 0000000100000de0 T __Z3foodi
- 0000000100000cf0 T __Z3fooi
- 0000000100000d90 T __Z3fooid
- 0000000100000d40 T __Z3fooii
- 0000000100000b50 T __Z3foov
我们可以看到C 的编译器给我们取的函数名是带了参数的~
,