差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
blog:cpp:basic_type_alias_and_const [2022/04/17 18:00] – caodan | blog:cpp:basic_type_alias_and_const [2022/04/17 18:35] (当前版本) – [指针、常量与类型别名] caodan | ||
---|---|---|---|
行 33: | 行 33: | ||
``` | ``` | ||
- | *using 比 typedef 的适用范围广*, 例如在using 可以在模板别名中使用,但using却不行。 | + | `using 比 typedef 的适用范围广`, 例如在using 可以在模板别名中使用,但using却不行。 |
``` | ``` | ||
行 44: | 行 44: | ||
## 指针、常量与类型别名 | ## 指针、常量与类型别名 | ||
+ | 如果某个类型别名指代的是复合类型或常量,那么把它用到声明语句里会产生意想不到的后果 | ||
+ | 例如下面的声明语句用到了类型pstring, | ||
+ | |||
+ | ``` | ||
+ | using pstring = char *; | ||
+ | const pstring cstr = nullptr; | ||
+ | const char *c_str; | ||
+ | ``` | ||
+ | |||
+ | cstr的定义相当于: | ||
+ | |||
+ | ``` | ||
+ | char szBuf[1024] = " | ||
+ | cstr = szBuf; | ||
+ | c_str = szBuf; // 正确 | ||
+ | ``` | ||
+ | |||
+ | 遇到一条使用了类型别名的声明语句时,人们往往会错误的尝试把类型别名替换成它原本的样子,通过上述的例子可以看到,这种理解是错误的。 | ||
+ | |||
+ | 简单替换的结果是 `const char` 成了基本数据类型,这两种声明的含义是截然不同的。 | ||
+ | |||
+ | ``` | ||
+ | const pstring *ps; // ps是一个指针,它的对象是一个指向char的常量指针。ps相当于 `char* const * ps` | ||
+ | //ps = & | ||
+ | ps = const_cast< | ||
+ | ``` |