1.首先针对decltype有两种表达方法,分别是不带括号的和带括号的。
2.其次,对于这两种表达方式的区别体现在变量上:
只要是带了括号就取被推断变量的引用,不带括号就直接取被推断变量定义时的类型
3.另外,如果被推断的是函数调用,则无论是带括号还是不带括号得到的都是函数的返回类型。
4.最后,如果被推断的是运算表达式,如果表达式得到的右值,则无论是带括号还是不带括号得到的都是被推断的类型;如果表达式得到的是左值,则无论是带括号还是不带括号得到的都是被推断的引用。
具体的,2,3,4条对应的代码如下:
int n, x = 1;
const int m = 0, z = 1;
//2.
decltype(n) a; //a->int
decltype((n)) b = n; //b->int &
decltype(m) c = 1; //c->const int
decltype((m)) d = n; //d->const int &
//3.
decltype(test()) e;//e->int
decltype((test())) f;//f->int
//4.
decltype(1 + 2) g;//g->int
decltype((1 + 2)) h;//h->int
decltype(m + z) i = m;//i->int
decltype((m + z)) j = z;//j->int
decltype(x += 10) k = x;//k->int &
decltype((x += 10)) l = x;//l->int &
今天的文章c++11:decltype分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/9495.html