C++笔记(三)~decltype
【摘要】 decltype基础作用选择并返回操作数的数据类型(编译器分析表达式并得到它的类型,却不实际计算表达式的值)示例#include<iostream>#include <typeinfo>using namespace std;int f(){ return 0;}int main(){ // 通过decltype 返回 f()的类型 int // 下面一句代码与 int sum...
decltype基础
作用
选择并返回操作数的数据类型(编译器分析表达式并得到它的类型,却不实际计算表达式的值)
示例
#include<iostream>
#include <typeinfo>
using namespace std;
int f(){
return 0;
}
int main(){
// 通过decltype 返回 f()的类型 int
// 下面一句代码与 int sum=2 等价
decltype(f()) sum=2;
cout<<"sum="<<sum<<endl;
cout<<"sum的类型是:"<<typeid(sum).name()<<endl;// i:整型
}
运行结果
decltype需要注意的地方
1.decltype处理顶层const、引用与auto不同
示例代码
#include<iostream>
using namespace std;
int main(){
const int ci=0;
const int &cj=ci;
decltype(ci) x=0;// x的类型是 const int
decltype(cj) y=x;// y的类型是 const int& ,引用,y是绑定到了x
//decltype(cj) z; // 错误:引用必须初始化
}
2.如果decltype使用的表达式不是一个变量,则decltype返回表达式结果对应的类型。
测试代码
#include<iostream>
#include<typeinfo>
using namespace std;
int main(){
int a=1;
// a是int a+2.0结果是double类型 所以decltye选择并返回的就是double类型
decltype(a+2.0) b;
cout<<"b的类型是:"<<typeid(b).name()<<endl;// d:double类型
}
运行结果

3.如果表达式的内容是解引用操作,则decltype会得到引用类型。
测试代码
#include<iostream>
using namespace std;
int main(){
int a=1;
int *p=&a;
int temp=3;
decltype(*p) c=temp;// 相当于 int &c=temp 此时c的类型是int& 引用!
cout<<"c="<<c;//c=3
}
测试结果

4.对于decltype所用的表达式来说,如果变量名加上了一对或多对括号,那么得到的类型与不加括号时会有不同。
测试代码
#include<iostream>
using namespace std;
int main(){
int a=1;
decltype(a) b;// 相当于 int b
decltype((a)) c=a;// 相当于 int &c=a 是引用
// 注意:当是decltype((variable)) 得到的结果永远是 引用!
}
预处理变量
两种状态
- 已定义
- 未定义
#define:把一个名字设定为预处理变量
#ifdef:当且仅当变量已定义时为真
#ifndef:当且仅当变量未定义为真
示例代码
#ifndef TEST_H
#define TEST_H
#include<iostream>
.
.
.
#endif
// 大概意思是:
// 首先判断TEST_H是否被定义 如果没有 则#ifndef判断未真 继续执行后面当操作,直到遇到#endif
// 如果TEST_H已经被定义了 则会忽略#ifndef、#endif之间当所有代码
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者

评论(0)