回顾C++11标准特性(1)

今天突发奇想不想使用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类型指示符的详细细节

  • delctype接表达式作为参数,针对只含有一个变量的表达式和不是一个变量的表达式表现不同的效果
  • delctype接只含有一个变量的表达式则返回这个变量的类型,包括顶层const和引用在内,这一点和auto不同,auto不能得到一个变量的顶层const,也不能操作引用,因为它认为引用并非是对象,所以auto对引用的操作,实际上是对引用指向的对象的操作。
  • delctype接不是一个变量的表达式的时候,如果这个表达式可以作为左值,则返回引用类型,否则则返回普通类型
  • 需要注意的是如果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的特殊之处

  • auto不能推导出顶层const的类型限制,详见c++primer p62

原文地址:https://www.cnblogs.com/metashit/p/12421565.html

时间: 2024-10-17 11:44:02

回顾C++11标准特性(1)的相关文章

C++11 标准新特性:Defaulted 和 Deleted 函数

前两天写的铁字中提到了C++的删除函数,今天特地去网上查了查,转载了一篇不错的文章... 转载自 http://www.ibm.com/developerworks/cn/aix/library/1212_lufang_c11new/index.html C++11 标准新特性:Defaulted 和 Deleted 函数 本文将介绍 C++11 标准的两个新特性:defaulted 和 deleted 函数.对于 defaulted 函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代

C++11 标准新特性: 右值引用与转移语义

C++ 的新标准 C++11 已经发布一段时间了.本文介绍了新标准中的一个特性,右值引用和转移语义.这个特性能够使代码更加简洁高效. 查看本系列更多内容 | 3 评论: 李 胜利, 高级开发工程师, IBM 2013 年 7 月 10 日 内容 在 IBM Bluemix 云平台上开发并部署您的下一个应用. 开始您的试用 新特性的目的 右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move

【转】C++11 标准新特性:Defaulted 和 Deleted 函数

原文链接http://www.ibm.com/developerworks/cn/aix/library/1212_lufang_c11new/ 本文将介绍 C++11 标准的两个新特性:defaulted 和 deleted 函数.对于 defaulted 函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代码执行效率,也可免除程序员手动定义该函数的工作量.对于 deleted 函数, 编译器会对其禁用,从而避免某些非法的函数调用或者类型转换,从而提高代码的安全性.本文将通过代码示例详

[C++11新特性]第二篇

0.可变数量参数,可变函数模版,变长模版类 c++98可变数量参数 #include<cstdio> #include<cstdarg> double SumOfFloat(int count, ...) { va_list ap; double sum=0; va_start(ap,count); for(int i=0;i<count;i++) sum+=va_arg(ap,double); va_end(ap); return sum; } int main() { p

C++培训 C++11新特性:杂项

C++培训之前小编给大家总结了一些C++的新特性,这一篇文章是介绍的C++11新特性之杂项,在后面的文章中,小编还会给大家总结一些C++11新特性的知识出来! 类型别名声明 类似typedef,新标准中可以使用using为类型声明一个别名(alias). std::cout<<"test using alias:\n"; using HT = double; using NAME = std::string; HT h = 1.78; NAME name = "R

C++11新特性:右值引用和转移构造函数

问题背景 [cpp] view plaincopy #include <iostream> using namespace std; vector<int> doubleValues (const vector<int>& v) { vector<int> new_values( v.size() ); for (auto itr = new_values.begin(), end_itr = new_values.end(); itr != end

C++ 11新特性解析——《深入理解C++ 11:C++11新特性解析和应用》读书笔记

因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出这篇读书笔记的基础.C++作为踏入编程的最初语言,一直充满感情,而C++11作为新标准虽然推出一段时间了,却因为总总原因直到现在才去开始真正了解,不过一句话回荡在脑中:当你认为为时已晚的时候,恰恰是最早的时候!从C++98到C++11, C++11标准经历了10几年的沉淀,以全新的姿态迎接新的挑战,长话短说,

【转】C++11常用特性的使用经验总结

出处 http://www.cnblogs.com/feng-sc C++11已经出来很久了,网上也早有很多优秀的C++11新特性的总结文章,在编写本博客之前,博主在工作和学习中学到的关于C++11方面的知识,也得益于很多其他网友的总结.本博客文章是在学习的基础上,加上博主在日常工作中的使用C++11的一些总结.经验和感悟,整理出来,分享给大家,希望对各位读者有帮助,文章中的总结可能存在很多不完整或有错误的地方,也希望读者指出.大家可以根据如下目录跳到自己需要的章节. 1.关键字及新语法 1.1

C++11新特性总结 (一)

1. 概述 最近在看C++ Primer5 刚好看到一半,总结一下C++11里面确实加了很多新东西,如果没有任何了解,别说自己写了,看别人写的代码估计都会有些吃力.C++ Primer5是学习C++11的比较好的书籍.这篇文章仅总结关于C++11中的新东西,老的东西不再赘述.本文的所有代码仅仅值列出关键代码,并且所有特性都已经用编译器验证过,我的编译环境 gcc 5.3.1  g++ 5.3.1 ,据说 4.7以上的版本已经支持大部分C++11的特性,VS系列的编译器对C++11的支持情况不甚了