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

2024-04-01 00:04

本文主要是介绍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的类型是doubledecltype(&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 可以明确地表达意图,使代码更加清晰和可靠。

(本章完)

这篇关于C++11标准 - 声明(auto,decltype,nullptr)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865717

相关文章

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

详解C++中类的大小决定因数

《详解C++中类的大小决定因数》类的大小受多个因素影响,主要包括成员变量、对齐方式、继承关系、虚函数表等,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 非静态数据成员示例:2. 数据对齐(Padding)示例:3. 虚函数(vtable 指针)示例:4. 继承普通继承虚继承5.

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa