(C++)零碎知识整理

C++初识

#include <iostream>

//命名空间,(名字隔离,可以嵌套)
using namespace std;

namespace one {
   int a = 10;
   namespace two {
       int a = 20;
       }
}//注:没有分号
namespace three {
    int a = 30;
    }
int a = 40;
int main() {
    int a = 50;
    printf("%d",a);
    //a -> 50; 因为就近原则,所以 a = 50;
    //::a -> 40; 因为 “::”为域作用限定符,所以此时'a'在整个域中查找,所以 a = 40;
    //three::a -> 30; 因为'three::'意为在名字为"three"的域中查找,所以 a = 30;
    //one::a -> 10; 因为'one::'意为在名字为"one"的域中查找,所以 a = 10;
    //one::two::a -> 20; 因为'one::two::'意为在名字为'one'的域中寻找,名字为'two'的域,然后在名为'two'的域中找寻'a'的值,所以 a = 20。

    return;
}

//////////////////////////////////////////

#include <iostream>
using namespace std;
//把std命名空间内东西全部展开
//不可以定义与库内同名的变量

int main() {
    cout<<"hello world"<<enfl;
    //输出 “hello world”
    //cout -> 输出;cin -> 输入;endl -> 换行
    return;
}

缺省参数

int Add (int a = 10 , int b = 10) {
    return a + b;
}

int main() {
    cout<<Add(1)<<endl;
    //半缺省,只能缺省右边的一个,或者多个;

    cout<<Add(1,1)<<endl;
    //都补全,不缺省

    cout<<Add()<<endl;
    //全缺省,缺少所有参数
}

函数重载

编译过程

  • C++ 可以在函数名相同,参数不同(1.个数不同;2.类型不同)的情况下重载;(对应位置,压栈顺序)

  • C语言 不可以重载


int Add(int a, int b) {
    return a + b;
}
int Add(int a, int b,int c) {
    return a + b + c;
}
int Add(int a, char b) {
    return a + b;
}
  • C语言在编译过程中,函数名字仍为原本名字,如(Add),所以在链接时,拿函数名寻找地址,C不修饰,即会不知道是该找哪一个函数

  • C++支持函数名修饰规则,每一个函数被修饰后均有不同,如:(Addii),(Addiii),(Addic)…等等,所以在链接时不会存在找不到函数的情况

函数在C++中的汇编代码

猜你喜欢

转载自blog.csdn.net/giraffe_255/article/details/79502758