C++11新标准之四:类型处理

ISO发布新的C语言——新标准C11 ISO正式发布了新的C语言的新标准C11,之前被称为C1X,官方名称为ISO/IEC 9899:2011。   新的标准提高了对C++的兼容性,并增加了一些新的特性。这些新特性包括:   对齐处理(Alignment)的标准化(包括_Alignas标志符,alignof运算符, aligned_alloc函数以及头文件。   _Noreturn 函数标记,类似于 gcc 的 __attrib 阅读详情
  • 类型别名

在C++11之前,如果定义类型别名使用 typedef 方式来定义,定义的方式如下:

//typedef  类型名  别名
typedef double Salary;
typedef double *Base; //Base是double* 类型
这种定义方式有点类似与定义一个变量的方式,只是定义的标示符不是变量名而是类型名

这种定义方式有一个缺点,当在定义如指针等复合类型,特别是加入const标示符之后,使得定义变得难于理解,如:

typedef char *pstring;
const pstring cstr = 0; // cstr是一个自身是const类型的指针,指针指向的类型是char类型的变量
const pstring *ps; // ps 是一个指针的指针,它指向const类型的指针,这个const类型的指针指向的类型是char类型的变量
  • auto关键字

auto关键字用于类型的推导,可以简化我们去写大段的类型定义(特别是容器中的迭代器),auto使用中需要初始化才能进行推导,如:

int val1=0, val2=1;
auto item = val1+val2; // item是int类型

std::vector<std::string> svec;
for(std::vector<std::string>::iterator iter = svec.begin(); iter != svec.end(); ++iter)
可以简写为
for(auto iter = svec.begin(); ...)
使用auto时,当推导复合类型以及const修饰符的时候需要注意:

1. 当在引用中推导时,auto代表该引用实际绑定对象的类型,如:

int i = 0;
int &r = i;
auto a = r; //a是int类型,因为r绑定的类型是int

2. auto在推导中会忽略顶层const(Top-level const),但是底层const(Low-level const)会被保留

int i = 0;
const int ci = i, &cr = ci;
auto b = ci; // b是int类型 (顶层const被忽略)
auto c = cr; // c 是int类型
auto d = &i; // d是int*类型
auto e = &ci; // e 是const int*类型(&ci得到的类型是指向const int类型的指针,是底层const)
如果我们想保留顶层的const,那么我们需要显示地声明,如:

const int ci = 10;
const auto f = ci; // f是const int类型
由于引用不是对象,因此引用中的const都是Low-level const,在auto推导类型的时候会被保留:

const int ci = 10;
auto &g = ci; // g 是const int&类型

  • decltype关键字

有时候我们不需要用一个表达式来初始化一个变量,而只是想知道这个表达式最终得到的是什么类型的变量,这时候我们可以使用decltype关键字:

decltypde推导类型与auto有一些不同:

1. decltype会保留顶层的const

2.decltype会保留引用

const int ci = 0, &cj = ci;
decltype(ci) x = 0; // x 是const int类型(Top-level const得到保留)
decltype(cj) y = x; // y 是const int& 类型
另外关于decltype还需要注意的地方:

当decltype((变量名))这时候得到的是一个引用的类型,但是decltype(变量名)只有当变量类型是引用类型的时候,才得到引用的类型.

如:

int i = 1;
decltypde((i)) d; //d是int& 类型
decltypde(i) e;   //e是int类型


STM32F103+LAN9252实战:从站代码迁移中的5个硬件坑与解决方案 本文分享了将EtherCAT从站代码从STM32F767迁移至STM32F103平台时,搭配LAN9252遇到的五个典型硬件问题及解决方案。核心挑战包括时钟源不匹配、FSMC时序配置、中断映射错误、片选资源不足以及Flash烧录异常。文章通过实战经验,强调了硬件差异对代码迁移的关键影响,并提供了具体的调试思路与配置方法。 阅读详情

相关推荐

DAZ STUDIO 快速渲染技巧

DAZ STUDIO 快速渲染技巧: 本文将向您展示几个快速渲染技巧。您将学习如何使您的Daz Iray渲染和照明在Daz工作室内更快。 当你有一个大场景,这可能需要很多小时进行渲染。 但是如果你想大幅度降低渲染时间呢?这篇文章的提示应该能让你达到这个目标。 首先,我们需要弄清楚一件事——没有“完美的环境或设置”这样的东西。是因为渲染设置是高度个性化和主观性的东西,这主要取决于场景和硬件。如果你有一个功能强大的计算机,你可以允许更多的低渲染时间,反之亦然。因此,一切都取决于您尝试渲染的对象和机器。

DAZSTUDIO的博客 9649

C++:C++11新特性详解(1)

前言:虽然目前没有编译器能够完全实现C++11,但这并不意味着我们不需要了解,学习它。深入学习C++11,你会发现这根本就是一门新的语言,它解决了c++98中许多遗留下来的问题。早晚会有一天,C++11便会普及大部分编译器。因此,提早做些准备也是应该的。在此我想做一个关于C++11的专题,将C++11的新特性进行一一讲解,以通俗易懂的语言及例子帮助读者入门C++11。本文便是C++11新特性超详细版

linwh8的博客 4万+

LabVIEW与VisionMaster融合开发:从封装避坑到高效集成的实战指南

本文为LabVIEW开发者提供了一套与海康VisionMaster融合开发的实战指南。针对直接调用SDK时遇到的程序集加载失败和面向对象编程冲突等核心障碍,文章详细介绍了通过C#进行“浅封装”的解决方案,包括封装显示控件和核心功能类,并给出了在LabVIEW中高效集成、调用及资源管理的最佳实践,旨在帮助开发者稳定、高效地集成机器视觉功能。

weixin_29210727的博客 154

(九)C++的新标准

C++的新标准不断引入新的语言特性和库功能,旨在提高语言的表达能力、性能和安全性。通过了解和掌握这些新特性,程序员可以编写出更高效、更现代的C++代码。

小新的博客 1132

从零开始:用AutoLisp为AutoCAD定制专属工具栏(2023最新版)

本文详细介绍了如何利用AutoLisp语言为AutoCAD定制专属工具栏,以提升绘图效率。内容涵盖从环境配置、AutoLisp基础语法到实战开发的全过程,指导用户编写自动化脚本、封装功能函数,并最终通过CUI编辑器创建和部署个性化工具栏按钮,是2023年CAD用户实现工作流自动化与个性化的实用指南。

4k5l6j7h8的博客 300

DRAM刷新refresh相关知识归类-基础小知识(三)

RAM每一位数据都是通过芯片内的一个小电容充电(或低电平)存储的。但随着时间的推移,电容逐渐失去电荷。为避免丢失存储的数据,必须定期刷新以将电荷(如果存在)恢复到其原始级别。此刷新过程包括读取每个位的值,然后将其写回。在此“刷新”期间,内存被占用,无法执行加载或存储位等正常操作。知道了应该这么做,但怎么去做以及有什么办法更有效率去做,就是接下来要整理的内容。

Paul 安的博客 1万+

【C++】C++11的std::function和std::bind用法详解

在设计回调函数的时候,无可避免地会接触到可回调对象。在C++11中,提供了std::function和std::bind两个方法来对可回调对象进行统一和封装。 可调用对象 C++中有如下几种可调用对象:函数、函数指针、lambda表达式、bind对象、函数对象。其中lambda表达式和bind对象是C++11标准中提出的(bind机制并不是新标准中首次提出,而是对旧版本中bind1st和bind2...

Yngz_Miao的博客 5万+

Autoware.universe部署03:与Carla(二进制版)联调

本文介绍了 Autoware.universe 与 Carla 二进制版的联调过程。Autoware.universe 是一个开源的自动驾驶软件平台,而 Carla 则是一个用于自动驾驶仿真的开源工具。将这两者联调起来可以在仿真环境中测试和验证 Autoware.universe 的功能和性能,为自动驾驶系统的开发和测试提供有力支持。

zardforever123的博客 7369

C++新标准:C++11到C++20特性

C++从C++11到C++20的发展,为我们带来了许多令人兴奋的新特性。这些特性不仅提高了编程的效率和安全性,还增强了C++的泛型编程能力。正确使用这些新特性,可以帮助我们编写更加简洁、高效和可维护的代码。在未来的发展中,C++将继续演进,引入更多的新特性和改进。对于开发者来说,掌握这些新特性,跟上C++的发展步伐,将是我们不断提升编程能力的重要途径。同时,我们也应该关注C++社区的研究和讨论,积极探索新的编程技术和最佳实践。

2501_92487717的博客 368

【OpenClaw企业级智能体实战】第16篇:电商“龙虾”掘金记:用OpenClaw实现小红书/抖音/淘宝全自动矩阵运营(2026实测版)

2026年,OpenClaw(小龙虾)已成为电商运营的核心效率工具——从公众号文案3分钟生成到TikTok爆款视频1小时复刻,从多平台内容同步到自动比价加购,彻底重构了电商运营的工作模式。本文基于真实商业案例(元岳科技、TikTok跨境卖家、淘宝MCP工具),系统拆解电商智能体的落地路径:先详解OpenClaw在电商场景的核心原理与变现模式(代部署、模板售卖、轻定制、内容套利),再提供阿里云/本地双部署方案,完整实现小红书/抖音/淘宝的自动化运营(热点抓取、内容生成、多平台分发、数据分析)。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2290

YOLOv11改进 | 模型知识蒸馏篇 | 利用模型蒸馏改进YOLOv11进行无损涨点 | 在线蒸馏 (附代码 + 完整文件 + 解析教程)

这篇文章给大家带来的最新改进是模型的蒸馏,利用教师模型指导学生模型从而进行模型的涨点,本文的内容不仅可以用于论文中,在目前的绝大多数的工作中模型蒸馏是一项非常重要的技术,所以大家可以仔细学习一下本文的内容,本文从YOLOv11的项目文件为例,进行详细的修改教程,文章内包括完整的修改教程,针对小白我出了视频修改教程,如果你还不会我提供了修改后的文件大家直接运行即可,所以说不用担心不会适用!模型蒸馏真正的无损涨点,蒸馏你只看这一篇文章就足够了,本文内容为在线蒸馏教程,之前的文章为离线蒸馏!

Snu77的博客 2667

C++11 原子类型与原子操作

atomic_flag 只支持 test_and_set() 以及 clear() 两个成员函数,test_and_set()函数检查 std::atomic_flag 标志,如果 std::atomic_flag 之前没有被设置过,则设置 std::atomic_flag 的标志;有一个比较特殊的原子类型是 atomic_flag,因为 atomic_flag 与其他原子类型不同,它是无锁(lock_free)的,即线程对其访问不需要加锁,而其他的原子类型不一定是无锁的。原子类型C++11中通过。

Doublelv 的博客专栏。 1万+

YOLOv13改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣ 已更新种不同的改进方案,专栏内的每篇文章皆,均可顺利运行。2️⃣ 订阅专栏即可进群获取以及从的各种答疑内容。3️⃣ 全新的YOLOv13改进专栏,,只为更好的满足论文发表的要求。专栏内容,专栏实时评分,全网最高,质量保证。🎫。。

Limiiiing的博客 9158

C++11&14新标准——模板模板参数(Template Template Parameter)、using

C++11&14新标准——模板模板参数(Template Template Parameter)、using

weixin_48956191的博客 1427

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C++ 探索C++新标准

1、新增类型long long([-263,263-1])、ussgned long long ([0,2^64-1])(这两个都是8字节存储)以支持64位的整形;2、新增char16_t char32_t以支持16位和32为的字符表示;3、新增原始字符串;C++11 引入了原始字符串的支持,使用 R 字符和定界符号 () 来定义在这个例子中,\ 和 " 作为普通字符处理,而不需要像常规字符串那样进行转义。

qq872742416的博客 567

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C++11及其新标准特性概览

public:// 自定义迭代器类型// ...

无远弗届 1170

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

73 CPP11新标准

所以,C++11 标准中,建议将const和constexpr的功能区分开,表达“只读”语义的场景用const,表达“常量”语义的场景用constexpr。例如,可以将0传递给形参为int的函数,但是,如果将nullptr传递给这样的函数,编译器将视为错误。array的大小是固定的,不像其它的模板类,但array有begin()和end()成员函数,程序员可以array对象使用STL算法。base:若base为0,则自动检测数值进制:若前缀为0,则为八进制,若前缀为0x或0X,则为十六进制,否则为十进制。

wade1010的专栏 974

简述部分C++11新标准

原始字面量原始字面量(值)可以直接表示字符串的实际含义,不需要转义和连接。语法:R"(字符串的内容)"R"xxx(字符串的内容)xxx"运行结果:统一的初始化(列表)C++11丰富了大括号的使用范围,用大括号括起来的列表(统一的初始化列表)可以用于所有内置类型和用户自定义类型。使用统一的初始化列表时,可以添加等号(=),也可以不添加。在 C++11 中,模板类是与统一初始化列表密切相关的一个重要概念,它为处理使用大括号括起来的初始化列表提供了一种标准化的方式。是一个模板类,定义在。

ikkkkkkkl的博客 1160

c++11新标准

1.类型说明符auto c++11中类型推导的实现方式之一就是重定义了auto关键字。另外一个实现是decltype. auto n = 5; vector<int> vec; auto iter = vec.begin(); 2.追踪返回类型decltype int i = 0; decltype(i) j = 9; template<class T1, class T2&...

qq_26611129的博客 429

C++新标准,查漏补缺(4)高级主题

本文是读《C++ Primer》(第五版)的笔记,但并不是事无巨细的笔记,而是一个C++98的老鸟,学习C++11,依据以往经验实践,对新标准的一种体会。 本文不面向新手,一方面给自己看,一方面希望有同样背景的C++开发人员能有所得,包含大量案例,如有不足,欢迎指正,共同学习。

Otosu的专栏 1204

cpp 原子操作_C++ 11 开发中的 Atomic 原子操作

来源:Nicol TAO ( @nicol_tao )链接:https://taozj.org/2016/09/C-11开发中的Atomic原子操作/原子操作在多线程开发中经常用到,比如在计数器,序列产生器等地方,这类情况下数据有并发的危险,但是用锁去保护又显得有些浪费,所以原子类型操作十分的方便。原子操作虽然用起来简单,但是其背景远比我们想象的要复杂。其主要在于现代计算系统过于的复杂:多处理器...

weixin_39687786的博客 153

【C++】C++11

C++11新特性综述 C++11作为C++的重要更新版本,引入了多项关键特性: 列表初始化:统一初始化方式,支持内置类型和自定义类型,通过initializer_list实现容器初始化 右值引用与移动语义:区分左值/右值,通过移动构造和移动赋值提升性能,解决深拷贝效率问题 可变参数模板:支持参数数量可变的模板,使用参数包和包扩展技术 新类功能:包括默认移动构造/赋值、成员变量缺省值、final/override等 lambda表达式:匿名函数对象,支持捕获列表,简化可调用对象定义 包装器:function统

2401_82610555的博客 1625

C++ 新标准大冒险:从 C++11 到现代 C++ 的进化之路

特性一句话说明auto 类型推导让编译器帮你猜类型nullptr终于有了真正的空指针范围 for遍历容器不再写 for(int i=0;…)智能指针再也不用手动 delete 了Lambda 表达式随处定义匿名函数右值引用 & 移动语义减少不必要的拷贝,性能飙升新容器特性一句话说明概念(Concepts)给模板参数加上"类型约束"范围(Ranges)链式调用的管道式数据处理协程(Coroutines)异步编程的新范式模块(Modules)告别#include。

2601_95888001的博客 558

C++11新特性总结

相比于C++98/03,C++11是C++程序设计语言标准的一个新的版本,在2011年由ISO批准并发布。C++11新标准从而代替了原来的C++98和C++03。C++11标准是对C++的一次巨大的改进和扩充。在核心语法,STL标准模板等方面增加众多新功能,新亮点。C++11能够更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更加强大,而且能够提升程序员的开发效率,公司实际项目开发中也用得比较多,所以我们要作为一个重点去学习。

2301_78131481的博客 1238

C++ Primer 处理类型

专栏简介:本专栏主要面向C++初学者,解释C++的一些基本概念和基础语言特性,涉及C++标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级程序设计技术。希望对读者有帮助!

专注于C/C++编程语言的博客,如果读者对C/C++语言有任何需要咨询的可以私信联系! 1154

探索C++11的无限可能:《深入理解C++11新特性解析与应用》推荐

探索C++11的无限可能:《深入理解C++11新特性解析与应用》推荐 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 《深入理解C++11新特性解析与应用》是一本由C++标准委员会专家及IBM XL编译器中国开发团队成员联合撰写的权威著作。本书首次全面深入地剖析了C++11新标准,不仅揭示了标准背后的设计哲学,还系统地覆盖了所有新语言特性、新标准库功能,并对已有特性进行...

gitblog_09709的博客 804
上一篇: 3dsMax 2009插件开发---插件中必需的DLL函数
下一篇: C++11新标准之五:constexpr
csxiaoshui
博客等级 码龄16年 873粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值