天天看点

(C++)零碎知识整理

C++初识

#include <iostream>

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

namespace one {
   int a = ;
   namespace two {
       int a = ;
       }
}//注:没有分号
namespace three {
    int a = ;
    }
int a = ;
int main() {
    int a = ;
    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 =  , int b = ) {
    return a + b;
}

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

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

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

函数重载

(C++)零碎知识整理
  • 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++)零碎知识整理