c++ 中decltype怎么用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 中decltype怎么用?相关的知识,希望对你有一定的参考价值。

#include <iostream>

using namespace std;

int main()
string s("Hello World!!!");
decltype(s.size()) punct_cnt = 0;
for (auto c : s)
if (ispunct(c))
++punct_cnt;
cout << punct_cnt << " punctuation characters in " << s << endl;
return 0;


报错如下:
3_5.cpp: In function ‘int main()’:
3_5.cpp:7:19: error: ‘decltype’ was not declared in this scope
3_5.cpp:7:21: error: expected ‘;’ before ‘punct_cnt’
3_5.cpp:8:12: error: ‘c’ does not name a type
3_5.cpp:11:2: error: expected ‘;’ before ‘cout’
3_5.cpp:11:10: error: ‘punct_cnt’ was not declared in this scope
3_5.cpp:12:2: error: expected primary-expression before ‘return’
3_5.cpp:12:2: error: expected ‘)’ before ‘return’

程序需要怎么改?是不是需要再include点什么啊?

1、在C++中,decltype作为操作符,用于查询表达式的数据类型。decltype在C++11标准制定时引入,主要是为泛型编程而设计,以解决泛型编程中,由于有些类型由模板参数决定,而难以(甚至不可能)表示之的问题。泛型编程在整个1990年代越发流行,对实现类型推导机制的需求也应运而生。为此,许多编译器厂商都基于程序语言现有的功能,自行实现了这类操作符,其实现如typeof,以及一些功能有限,但更易移植的实现。2002年间,比雅尼·斯特劳斯特鲁普提议在C++内标准化这类操作符,并将之加入C++;且建议命之为“decltype”,以反映其具有获取表达式的“声明类型”(Declared Type)的功能。
2、从语义上说,decltype的设计适合于通用库编写者与编程新手。总体上说,对于目标对象或函数,由decltype推导出的类型与源码中的定义可精确匹配。而正如sizeof操作符一样,decltype亦不需对操作数求值。
参考技术A 不知道你什么编译器,如果是gnu的,加编译参数-std=c++11,如果是微软系列的,去微软官网查是否支持decltype,然后按照文档修改。 参考技术B decltype包含于当前的C++标准C++11中,并由许多编译器以扩展的形式提供:微软在Visual C++ 2010编译器中提供了decltype操作符,基本实现了标准委员会提案中所描述的语义,并且在托管代码或原生代码中都可使用。据其文档称,这一实现“主要对编写模板库的开发者有用。”从2008年3月5日发布的4.3版开始,GCCC++编译器也加入了decltype操作符。这一操作符也已纳入了Codegear的C++ Builder 2009、Intel C++编译器与Clang。[1]

C++ Primer阅读笔记:decltype

目录

简介

Hello!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
 
ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生

以上是关于c++ 中decltype怎么用?的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer阅读笔记:decltype

C++ 11 auto 与 decltype

C++ 11 auto 与 decltype

decltype关键字

C++学习笔记——auto/decltype 自动推导类型

C++学习笔记——auto/decltype 自动推导类型