zuihaobushi 2020-03-05
今天突发奇想不想使用cout进行输出信息了,想把cout换成自己任意指定的非关键词变量名字进行输出
#include <iostream> using namespace std; int main(){ decltype(cout) &shit = cout; shit<<"i am piece of shit"<<endl; return 0; }
需要注意的是,我是用g++进行编译的时候需要指明使用的标准
g++ shit.cpp -o shit -std=c++11
这样就实现了使用shit替换cout的目的.
获取类型在c++11标准中有两个操作符,一个是auto一个是decltype,不同的是auto好像只能获取基础类型的类型信息,如果是自定义类型,就有问题
事实证明
auto &shit = cout
也可以正常执行
auto是通过右值进行推导类型,而decltype像是一个函数,传入表达式或者对象作为参数可以获得其类型
decltype类型指示符的详细细节
Eg:
int i = 10; decltype(i) a;//等同于 int a decltype((i))b;//等同于int &b 就是因为加了个括号,且i能作为左值,同样类似的有解引用操作符表达式 int *p = &i; decltype(*p) c;//等同于int &c,因为*p也可以作为左值
auto的特殊之处