CPP琐记 01

算是每天学习/加深的一个记录,尽量每天补充…

const相关

我以往对const的理解,除了常量以外,用在函数的参数里面可以防止被修改,但经常和指针放在一起就忘记了优先级有点蒙

const int *a;
int const *b;
// 均为指向int常量的指针

看啊,多么迷人的陷阱等着你跳,结合之后很明显他俩是一个东西……
其实真正有区别的是

int *const c; //指向int的常量指针
const int* const d; //指向一个int常量的常量指针

用在函数返回值里面可以达到更迷惑的效果,clang甚至会警告你。
const int func1(); //Clang-Tidy: Return type ‘const int’ is ‘const’-qualified at the top level, which may reduce code readability without improving const correctness.
const int* func2(); //返回值是一个指向int常量的指针 const int *x = func2();
int *const func3(); //实际上返回了一个指向int的指针 int* x = func3();

补充:
void func4(const A &a);
我们传“引用”的时候可以加上const防止被修改,当然int这种完全没必要,值拷贝下没啥损耗,看汇编也知道这点。
也可以用于类,用构造函数给const成员变量赋值

class ConstTest
{
private:
public:
ConstTest(int a);
const int a;
};

ConstTest::ConstTest(const int a) : a(a) {}

ConstTest constTest(2);
反汇编如下
push 2 ; a
lea ecx, [ebp+constTest] ; this
call j_??0ConstTest@@QAE@H@Z ; ConstTest::ConstTest(int)


逆向的时候没Const这个概念了我觉得真的不要写的太迷惑,但事实是难免哪天就用到了呢?



发表评论

电子邮件地址不会被公开。 必填项已用*标注