一般大部分人都喜欢用#define来定义代码中的常量,可以让代码更简洁,我原先认为const 和#define定义常量的效果相同,但事实上并非如此

这几天在写一道状压dp的题,无意间发现了关于const和#define定义常量的一些区别:
看代码:

1
2
3
4
5
6
7
8
9
10
#include <bits/stdc++.h>
using namespace std;
#define test1 1 << 21
const int test2 = 1 << 21;
int main()
{
cout << "test1: " << test1 << endl;
cout << "test2: " << test2 << endl;
return 0;
}

对于上面的代码,乍一看应该结果是相同的,但是请看运行结果:
在这里插入图片描述
如此看来,如果用#define来定义位运算得出的常量,得出的答案是错误的 (似乎直接忽略位运算符直接拼接?)
但是const int 定义得出了正确的结果。

姑且记住是一个坑点吧、、、debug一下午才发现是常量值错了。而且这种错误有隐蔽性,很难发现

如果有大佬知道二者还有其他区别或者知道这种区别的原因,本蒟蒻愿闻其详(期待)