这里顺便回顾一下C中的知识:,今天小编就来说说关于布尔型数据只有两个值?下面更多详细答案一起来看看吧!

布尔型数据只有两个值(布尔类型内联函数)

布尔型数据只有两个值

1)布尔类型
  1. bool a = false;
  2. cout << a << " " << boolalpha << a << endl;
  3. /*
  4. bool 布尔类型:
  5. true为真,false为假
  6. 任何基本类型都可以隐士转换为bool类型
  7. 非0即真,0即假
  8. boolalpha -> 相当于一个开关,表示开,打印true和false
  9. noboolalpha -> 表示关,关闭后打印 0||1
  10. */

这里顺便回顾一下C中的知识:

  1. a = *("abc" 3); // 0->a 1->b 2->c 3->\0
  2. cout << a << endl;
  3. /*
  4. 这三种意思相同
  5. a = *("abc" 3);
  6. a = "abc"[3];
  7. a = 3["abc"];
  8. */
2)内联函数

内联 inline: 和#define很像

就是用已被编译好的二进制代码,替换对函数的调用,避免调用开销(栈区到代码区的调用)

使用inline关键字期望该函数被优化内联,不过是否内联由编译器决定

内联函数的缺点:inline会使占用内存变大

另外!复杂的函数和递归不可以用内联,因为递归是调用自己,会占用非常大非常大的内存空间。

  1. inline int Max(int a,int b){
  2. return a>b?a:b;
  3. }
  4. int main()
  5. {
  6. Max(10,20);
  7. return 0;
  8. }
3)重载!

重载:同一作用域,函数名相同,参数表不同的函数

重载和形参名无关

不同作用域同名函数遵循临近隐藏原则

重载和返回类型无关

参数表不同:1.类型不一样 2.数目不一样 3.顺序不一样

  1. void foo(){
  2. cout << "void foo();" << endl;
  3. }
  4. void foo(int a){
  5. cout << "void foo(int a);" << endl;
  6. }
  7. void foo(int a,int b){
  8. cout << "void foo(int a,int b);" << endl;
  9. }
  10. void foo(int a,double b){
  11. cout << "void foo(int a,double b);" << endl;
  12. }
  13. void foo(double a,int b){
  14. cout << "void foo(double a,int b);" << endl;
  15. }
  16. int main()
  17. {
  18. foo();
  19. foo(1);
  20. foo(1 , 2);
  21. foo(1 , 3.14);
  22. foo(3.14 , 1);
  23. }

那么!问题来了!编译器是怎么区别函数的重载的呢?

其实,我们起的函数的名字编译器会给我们改掉

我们在Linux下用nm命令查看一下C 编译器给函数取的名字

  1. # nm 2.out
  2. 0000000100000de0 T __Z3foodi
  3. 0000000100000cf0 T __Z3fooi
  4. 0000000100000d90 T __Z3fooid
  5. 0000000100000d40 T __Z3fooii
  6. 0000000100000b50 T __Z3foov

我们可以看到C 的编译器给我们取的函数名是带了参数的~

,