C++11标准 - 声明(auto,decltype,nullptr)

C++11标准 - 声明(auto,decltype,nullptr)

  • 前言
  • 1. auto
  • 2. decltype
  • 3. nullptr

前言

c++11提供了多种简化声明的方式,尤其是在使用模板时。

1. auto

在C++98中auto是一个存储类型的说明符,表明变量是局部自动存储类型,但是局部域中定义局部的变量默认就是自动存储类型,所以auto就没什么价值了。C++11中废弃auto原来的用法,将其用于实现自动类型腿断。这样要求必须进行显示初始化,让编译器将定义对象的类设置为初始化值的类型。


int main()
{
	int i = 10;
	auto p = &i;
	map<string, string> s{ {"sort", "排序"}, {"insert", "插入"} };
	auto it = s.begin();
	//typeid 是一个运算符,用于获取表达式的类型信息
	cout << typeid(p).name() << endl;
	cout << typeid(it).name() << endl;
	
	return 0;
}

在这里插入图片描述

2. decltype

在C++中,decltype 是一个关键字,用于获取表达式的类型。它返回表达式的静态类型,并且保留类型的修饰符(例如 const、引用等)。

template<class T1, class T2>
void F(T1 t1, T2 t2)
{
	decltype(t1 * t2) ret;
	cout << typeid(ret).name() << endl;
}
int main()
{
	const int x = 1;
	double y = 2.2;
	decltype(x * y) ret; // ret的类型是double
	decltype(&x) p;      // p的类型是int const *
	cout << typeid(ret).name() << endl;
	cout << typeid(p).name() << endl;
	F(1, 'a');
	return 0;
}

在这里插入图片描述

总而言之,decltype 是一个有用的关键字,可以在编译期间获取表达式的类型,并在类型推断和元编程方面提供更多灵活性。

3. nullptr

由于C++中NULL被定义成字面量0,这样就可能回带来一些问题,因为0既能指针常量,又能表示整形常量。所以出于清晰和安全的角度考虑,C++11中新增了nullptr,用于表示空指针。

使用 nullptr 可以提高代码的可读性,并且在类型安全和重载决议方面比0和NULL更可靠。

int* ptr = nullptr;  // 声明一个空指针

void foo(int* ptr) {
    if (ptr == nullptr) {
        // 执行某些操作,表示ptr为空指针
    } else {
        // 执行某些操作,表示ptr不为空指针
    }
}

class MyClass {
public:
    void myMethod() {
        // 执行某些操作
    }
};

MyClass* obj = nullptr;  // 声明一个空指针

if (obj == nullptr) {
    // 执行某些操作,表示obj为空指针
} else {
    obj->myMethod();  // 调用对象的成员函数,需要先检查指针是否为空
}

在上述示例中,nullptr 用于声明空指针 ptr 和 obj。在条件语句中,使用 nullptr 进行空指针的比较。同时,使用 nullptr 可以明确地表达意图,使代码更加清晰和可靠。

(本章完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/507146.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[蓝桥杯 2019 省赛 AB] 完全二叉树的权值

# [蓝桥杯 2019 省 AB] 完全二叉树的权值 ## 题目描述 给定一棵包含 $N$ 个节点的完全二叉树&#xff0c;树上每个节点都有一个权值&#xff0c;按从上到下、从左到右的顺序依次是 $A_1,A_2, \cdots A_N$&#xff0c;如下图所示&#xff1a; 现在小明要把相同深度的节点的权值…

移动硬盘怎么加密?移动硬盘加密软件有哪些?

移动硬盘是我们在工作中最常用的移动存储设备&#xff0c;为了保护数据安全&#xff0c;需要使用专业的移动硬盘加密软件加密保护。那么&#xff0c;移动硬盘加密软件有哪些&#xff1f; ​BitLocker BitLocker是Windows的磁盘加锁功能&#xff0c;可以用于加密保护移动硬盘中…

Devin、OpenDevin

文章目录 关于 DevinCognition 公司Devin 的能力 关于 OpenDevin⭐️ Research Strategy&#x1f6e0; Technology Stack 使用 OpenDevin安装选择一个 Model在命令行运行 关于 Devin Cognition 发布了世界上第一个完全自主的人工智能软件工程师 Devin&#xff0c;在 SWE-bench…

Bert基础(九)--Bert变体之ALBERT

在接下来的几篇&#xff0c;我们将了解BERT的不同变体&#xff0c;包括ALBERT、RoBERTa、ELECTRA和SpanBERT。我们将首先了解ALBERT。ALBERT的英文全称为A Lite version of BERT&#xff0c;意思是BERT模型的精简版。ALBERT模型对BERT的架构做了一些改变&#xff0c;以尽量缩短…

【C++】vector系列力扣刷题日志(136.只出现一次的数字,118.杨辉三角,26.删除有序数组中的重复项,260.只出现一次的数字 |||)

目录 136.只出现一次的数字 118.杨辉三角 26.删除有序数组中的重复项 260.只出现一次的数字 ||| vector的详细介绍及用法这里就不过多赘述了&#xff0c;可以参考上一篇博客&#xff1a;vector的介绍及使用说明 136.只出现一次的数字 题目&#xff1a; 给你一个 非空 整数…

深入理解鸿蒙生命周期:从应用到组件

在开发鸿蒙&#xff08;HarmonyOS&#xff09;应用时&#xff0c;理解生命周期的概念至关重要。生命周期不仅关乎应用的性能优化&#xff0c;还涉及到资源管理和用户体验等多个方面。本文将详细解析鸿蒙操作系统中应用、页面和组件的生命周期&#xff0c;帮助开发者更好地掌握这…

炸裂,PG的FDW又进化了!

&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61c;&#x1f61c; 中国DBA联盟(ACD…

Python 用pygame简简单单实现一个打砖块

# -*- coding: utf-8 -*- # # # Copyright (C) 2024 , Inc. All Rights Reserved # # # Time : 2024/3/30 14:34 # Author : 赫凯 # Email : hekaiiii163.com # File : ballgame.py # Software: PyCharm import math import randomimport pygame import sys#…

C++:加减乘除运算符(14)

就是常用的一些算数符 正1010负-10-10加102030减10 - 20-10 乘 10 * 20200除10 / 200.5 加 简单的加法运算 #include<iostream> using namespace std;int main() {// 加减乘除int a1 10;int b1 20;cout << a1 b1 << endl;system("pause");ret…

鸿蒙OS开发实战:【ArkTS 实现MQTT协议(2)】

软件说明 协议传输通道仅为TCPSocket基于HarmonyOS SDK API 9开发开发语言&#xff1a;ArkTS&#xff0c;TypeScript 应用操作说明 测试首页 “连接” : 用于连接远端服务器。具备“连接 & 断开” 两个功能“设置” : 用于添加更多主题“订阅” & “解除” : 仅用于…

LLM:函数调用(Function Calling)

1 函数调用 虽然大模型能解决很多问题&#xff0c;但大模型并不能知晓一切。比如&#xff0c;大模型不知道最新消息(GPT-3.5 的知识截至 2021年9月&#xff0c;GPT-4 是 2023 年12月)。另外&#xff0c;大模型没有“真逻辑”。它表现出的逻辑、推理&#xff0c;是训练文本的统计…

第九节:时间队列(终结篇)

一、概述 在常规的时间管理中是时间到了触发某个任务&#xff0c;这样一个时间点对应一个任务。在特殊的场景下&#xff0c;任务不断放送到时间队列&#xff0c;时间一到&#xff0c;全部任务执行并释放。如图&#xff1a; 二、时间队列组件 SMB提供了TimeFragment组件来构建…

Domino中的Web博客还能这么用

大家好&#xff0c;才是真的好。 最近时间比较空余&#xff08;闲得慌&#xff09;&#xff0c;计划做一个网站出来。虽然网站很不流行&#xff0c;但对80后程序员来说&#xff0c;毕竟容易实现和感觉亲切。 在Domino平台上做一个网站实在是太容易了&#xff0c;但除了手动开…

【Linux】IP协议

目录 IP报头格式 网段划分 特殊的IP地址 IP地址的数量限制 私有IP地址和公网IP地址 路由 IP报文分片 1.粗粒度谈谈分片 a. 确保将所有的分片全部聚到一起&#xff08;相同的标识&#xff09; b. 片偏移排序&#xff08;完成组转&#xff09; 2.分片细节 数据链路层 M…

http模块 服务器端如何响应(获取)静态资源?

一、静态资源与动态资源介绍&#xff1a; &#xff08;1&#xff09;静态资源 内容长时间不改变的资源。eg&#xff1a;图片、视频、css js html文件、字体文件... &#xff08;2&#xff09;动态资源 内容经常更新的资源。eg&#xff1a;百度首页、淘宝搜索列表... 二、服…

引领向量数据库技术新变革,Milvus 2.4 正式上线

备受关注的 Milvus 2.4 正式上线! 作为向量数据库赛道的领军者,Zilliz 一直致力于推动向量技术的进步与创新。本次发布中,Milvus 新增支持基于 NVIDIA 的 GPU 索引—— CUDA 加速图形索引(CAGRA),突破了现有向量搜索的能力。 GPU 索引是向量数据库技术中的重要里程碑,…

【码银送书第十六期】大模型在金融行业的应用场景和落地路径

作者&#xff1a;林建明 来源&#xff1a;IT阅读排行榜 本文摘编自《AIGC重塑金融&#xff1a;AI大模型驱动的金融变革与实践》&#xff0c;机械工业出版社出版 文章转自&#xff1a;大模型在金融行业的应用场景和落地路径 这是最好的时代&#xff0c;也是最坏的时代。尽管…

Linux系统使用Docker部署个人IT工具箱IT-Tools结合内网穿透实现公网访问

作为程序员&#xff0c;在日常工作中&#xff0c;需要借助一些工具来提高我们工作效率&#xff0c;IT-Tools是为开发人员度身打造的一套便捷在线工具。它提供全面功能&#xff0c;使开发者能以更高效方式完成任务。经由IT-Tools&#xff0c;开发人员能轻松应对各类技术挑战&…

【随笔】Git -- 高级命令(上篇)(六)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

CVPR 2024 | 风格迁移和人像生成汇总!扩散模型diffusion用于经典AIGC方向

风格迁移 1、DEADiff: An Efficient Stylization Diffusion Model with Disentangled Representations 基于文本到图像扩散模型在迁移参考风格方面具有巨大潜力。然而&#xff0c;当前基于编码器的方法在迁移风格时显著损害了文本到图像模型的文本可控性。本文提出DEADiff来解决…