网站备案包括哪些/网站seo快速排名优化

网站备案包括哪些,网站seo快速排名优化,百度联盟 网站备案,wordpress7牛云目录 C11简介 统一的列表初始化 1.初始化范围扩展 2.禁止窄化转换(Narrowing Conversion) 3.解决“最令人烦恼的解析”(Most Vexing Parse) 4.动态数组初始化 5. 直接初始化返回值 总结 声明 1.auto 类型推导 2. declty…

目录

C++11简介

统一的列表初始化

1.初始化范围扩展

2.禁止窄化转换(Narrowing Conversion)

3.解决“最令人烦恼的解析”(Most Vexing Parse)

4.动态数组初始化

5. 直接初始化返回值

总结

声明

1.auto 类型推导

2. decltype 类型推导

3. 尾置返回类型(Trailing Return Type)

4. nullptr 关键字

5.using 别名声明

6.默认和删除函数(= default 与 = delete)

范围for循环

STL容器

1. std::array(固定大小数组)

2. std::forward_list(单向链表)

3. 无序关联容器(基于哈希表)

4. std::tuple(元组容器)


C++11简介

C++11(原称 C++0x)是 C++ 编程语言的第三个国际标准(ISO/IEC 14882:2011),于 2011 年 8 月正式发布。它是自 1998 年 C++98 标准后的首次重大更新,引入了大量新特性,旨在提高代码效率、简化开发流程并支持现代编程范式。C++11 被广泛认为是 C++ 的“现代化重生”,推动了语言向更高抽象层级、更安全的资源管理和更强大的并发支持发展。

C++11 的起源

  1. 应对现代编程挑战
    C++03(2003 年小修订版)后,开发者逐渐发现语言在并发编程、泛型编程和资源管理上的局限性。硬件多核化、移动语义需求(如高效对象转移)等趋势要求语言进化。

  2. 标准化进程

    • C++0x 项目:最初计划在 2000 年代完成(故代号 C++0x),但因复杂性多次延期,最终于 2011 年发布,更名为 C++11。

    • 委员会合作:ISO C++ 标准委员会(WG21)主导设计,融合了全球开发者、学术界和企业的提案,Bjarne Stroustrup(C++ 创始人)和 Herb Sutter 等专家推动关键特性。

  3. 设计目标

    • 保持与 C++98/C++03 的兼容性。

    • 提升类型安全性和性能(如右值引用、移动语义)。

    • 简化代码(如 auto 关键字、范围 for 循环)。

    • 支持多线程(标准线程库 <thread>)。

统一的列表初始化

C++11 引入了 统一列表初始化(Uniform Initialization),允许使用统一的 {} 语法初始化各种类型的对象(包括基本类型、数组、结构体、类对象、容器等)。这一特性解决了传统初始化方式的不一致性问题,增强了代码的可读性和安全性。

1.初始化范围扩展

C++98 的限制

  • 仅支持聚合类型(如数组、无自定义构造函数的结构体/类)的列表初始化:
int arr[] = {1, 2, 3};        // 允许:数组struct Point 
{ int x;int y; 
};
Point p = {3, 4};             // 允许:聚合类
  • 不支持非聚合类型(如有构造函数的类或 STL 容器)直接使用 {} 初始化:
std::vector<int> v = {1, 2, 3}; // C++98 报错:不支持直接列表初始化

C++11 的改进

  • 支持所有类型(包括非聚合类、容器、用户自定义类型)的列表初始化: 
    // 直接初始化非聚合类(需定义接受 std::initializer_list 的构造函数)std::vector<int> v = {1, 2, 3};   // 合法std::string s{"Hello"};           // 合法struct Point{int _x;int _y;};// 使用大括号对内置类型进行初始化int x1 = { 1 }; // 可添加等号int x2{ 2 };    // 可不添加等号// 使用大括号对数组元素进行初始化int array1[]{1, 2, 3, 4, 5}; // 可不添加等号// 使用大括号对结构体元素进行初始化Point p{ 1, 2 }; //可不添加等号

2.禁止窄化转换(Narrowing Conversion)

C++98 的问题

  • 允许隐式窄化转换(可能导致数据丢失或未定义行为):

int x = 5.5;   // 合法:隐式截断为 5(但可能导致逻辑错误)

C++11 的改进

  • 使用 {} 初始化时禁止隐式窄化转换:

int x{5.5};    // 编译错误:double → int 是窄化转换
int y(5.5);    // 合法(传统方式允许,但结果可能不符合预期)

3.解决“最令人烦恼的解析”(Most Vexing Parse)

C++98 的歧义问题

  • 声明对象时可能被误解析为函数声明:

class Widget { /*...*/ };
Widget w();     // 歧义:声明一个返回 Widget 的函数,而非默认构造对象

C++11 的改进

  • 使用 {} 消除歧义:

Widget w1{};    // 明确调用默认构造函数
Widget w2();    // 仍被解析为函数声明

4.动态数组初始化

C++98 的限制

  • 动态分配的数组无法直接初始化:

int* arr = new int[3]; // 需后续逐个赋值
arr[0] = 1; arr[1] = 2; arr[2] = 3;

C++11 的改进

  • 允许动态数组直接使用列表初始化:

int* arr = new int[3]{1, 2, 3}; // 合法

5. 直接初始化返回值

C++98 的局限

  • 函数返回复杂对象时需显式构造:

std::vector<int> getData() {std::vector<int> tmp;tmp.push_back(1);tmp.push_back(2);return tmp;
}

C++11 的改进

  • 可直接返回初始化列表:

std::vector<int> getData() {return {1, 2, 3}; // 直接构造并返回
}

总结

C++11 的统一列表初始化通过以下方式彻底改变了 C++ 的编码风格:

  1. 语法一致性:所有类型初始化方式统一,减少记忆负担。

  2. 安全性增强:禁止窄化转换,避免潜在错误。

  3. 代码简洁性:简化容器和复杂对象的初始化流程。

  4. 现代编程支持:为后续标准(如 C++14/17)的改进奠定基础。

声明

C++11 在变量、函数、类等声明方面引入了多项重要改进,旨在提升代码简洁性、类型安全性和表达能力。

1.auto 类型推导

  • 功能:允许编译器自动推导变量类型,减少冗余的类型书写。

auto x = 42;                    // x → int
auto s = "Hello";               // s → const char*
std::vector<int> vec = {1, 2, 3};
auto it = vec.begin();          // it → std::vector<int>::iterator// C++98 必须显式写出类型
std::vector<int>::iterator it = vec.begin();

2. decltype 类型推导

  • 功能:获取表达式的类型,用于声明复杂类型或模板编程。

int x = 10;
decltype(x) y = 20;             // y 的类型为 inttemplate<typename T, typename U>
auto add(T a, U b) -> decltype(a + b) { // 推导返回值类型return a + b;
}

3. 尾置返回类型(Trailing Return Type)

  • 功能:将函数返回类型放在参数列表之后,提高可读性(尤其适用于模板函数)。

auto func(int a, double b) -> int; // 声明// 结合 decltype 推导返回值类型。
// Lambda 表达式(隐式使用尾置返回类型)。
template<typename T, typename U>
auto multiply(T t, U u) -> decltype(t * u) {return t * u;
}

4. nullptr 关键字

  • 功能:替代 NULL 或 0 表示空指针,避免与整数类型的歧义。

void func(int);
void func(char*);
func(nullptr); // 调用 void func(char*)
func(0);       // 调用 void func(int)// C++98
int* p = NULL; // C++98 中 NULL 通常是 0 的宏定义,类型不安全

5.using 别名声明

  • 功能:替代 typedef 定义类型别名,支持模板化。

using IntPtr = int*;          // 等价于 typedef int* IntPtr;
template<typename T>using Vec = std::vector<T>;   // 模板化别名(C++98 无法实现)
Vec<int> v;                   // 等价于 std::vector<int>

6.默认和删除函数(= default 与 = delete

  • = default:显式要求编译器生成默认函数(如构造函数、拷贝赋值运算符)。

class MyClass {
public:MyClass() = default;      // 显式生成默认构造函数
};
  • = delete:禁止编译器生成特定函数,或禁用某些重载。
class NonCopyable {
public:NonCopyable(const NonCopyable&) = delete; // 禁止拷贝
};
void func(int) {}
void func(double) = delete;   // 禁用 double 版本的重载

范围for循环

范围 for 循环是 C++11 引入的一项简化遍历操作的特性,它允许开发者以更简洁、直观的方式遍历容器、数组或其他可迭代对象的元素。

基本语法

for (声明 : 范围表达式) 
{// 循环体
}
  • 声明:定义一个变量,用于依次获取范围内的每个元素(通常使用 auto 推导类型)。

  • 范围表达式:可以是数组、STL 容器(如 vectorlist)、初始化列表,或任何支持 begin() 和 end() 成员/自由函数的对象。

  • 隐式依赖 begin() 和 end()

    • 范围表达式必须能通过 begin(范围表达式) 和 end(范围表达式) 获取迭代器(包括自由函数或成员函数)。

代码示例:

// 结合 auto 关键字,避免显式写出复杂类型:
std::vector<int> vec = {1, 2, 3};
for (auto& num : vec)     // 使用引用避免拷贝
{ num *= 2; // 可修改元素
}// 使用 const auto& 避免拷贝,同时防止修改元素
for (const auto& str : stringList) 
{std::cout << str << std::endl;
}

STL容器

C++11中新增了五个容器,分别是array、forward_list、unordered_map和unordered_set、tuple

1. std::array(固定大小数组)

  • 用途:替代传统的 C 风格数组,提供安全的边界检查、STL 兼容接口和值语义

  • 对比 C++98:C 风格数组无成员函数,且易因越界导致未定义行为。

#include <array>
std::array<int, 3> arr = {1, 2, 3};
arr.at(1) = 42;    // 安全访问(越界抛出异常)
for (auto num : arr) { std::cout << num; } // 范围 for 循环

2. std::forward_list(单向链表)

  • 用途:内存敏感场景下的单向链表,仅支持前向遍历。

  • 特点

    • 比 std::list(双向链表)更省内存(每个节点少一个指针)。

    • 仅支持 push_front()insert_after() 等操作,无 size() 方法。

  • 适用场景:需要低内存开销且无需反向遍历的场景(如缓存池、轻量级链表)。

#include <forward_list>
std::forward_list<int> flist = {1, 2, 3};
flist.push_front(0);       // 头部插入
auto it = flist.begin();
flist.insert_after(it, 99); // 在第一个元素后插入

3. 无序关联容器(基于哈希表)

C++11 引入了基于哈希表的无序容器,提供平均 O(1) 复杂度的查找、插入和删除操作。

  • std::unordered_set 和 std::unordered_multiset

  • std::unordered_map 和 std::unordered_multimap

可以查看前面文章,STL详解

4. std::tuple(元组容器)

  • 用途:存储任意类型组合的固定大小集合(类似结构体,但无需显式定义类型)。

  • 特点

    • 支持通过 std::get<索引> 或结构化绑定(C++17)访问元素。

    • 常用于函数多返回值或泛型编程。

#include <tuple>
auto data = std::make_tuple(42, "Hello", 3.14);
int num = std::get<0>(data);      // 获取第一个元素
std::string str = std::get<1>(data); 

对比表格:C++11 新增容器 vs C++98 容器

容器类型C++11 新增C++98 类似容器主要差异
固定数组std::arrayC 风格数组安全、支持 STL 接口
单向链表std::forward_liststd::list仅前向遍历,内存更省
哈希集合std::unordered_setstd::set无序 vs 有序,哈希表 vs 红黑树
哈希映射std::unordered_mapstd::map同上
元组std::tuple(增强)无直接等价多类型混合存储

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

整形在内存中的存储(例题逐个解析)

目录 一.相关知识点 1.截断&#xff1a; 2.整形提升&#xff1a; 3.如何 截断&#xff0c;整型提升&#xff1f; &#xff08;1&#xff09;负数 &#xff08;2&#xff09;正数 &#xff08;3&#xff09;无符号整型&#xff0c;高位补0 注意&#xff1a;提升后得到的…

HTML中滚动加载的实现

设置div的overflow属性&#xff0c;可以使得该div具有滚动效果&#xff0c;下面以div中包含的是table来举例。 当table的元素较多&#xff0c;以至于超出div的显示范围的话&#xff0c;观察下该div元素的以下3个属性&#xff1a; clientHeight是div的显示高度&#xff0c;scrol…

人工智能助力家庭机器人:从清洁到陪伴的智能转型

引言&#xff1a;家庭机器人进入智能时代 过去&#xff0c;家庭机器人只是简单的“工具”&#xff0c;主要用于扫地、拖地、擦窗等单一任务。然而&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;家庭机器人正经历从“机械助手”向“智能管家”甚…

Flume详解——介绍、部署与使用

1. Flume 简介 Apache Flume 是一个专门用于高效地 收集、聚合、传输 大量日志数据的 分布式、可靠 的系统。它特别擅长将数据从各种数据源&#xff08;如日志文件、消息队列等&#xff09;传输到 HDFS、HBase、Kafka 等大数据存储系统。 特点&#xff1a; 可扩展&#xff1…

Spring源码解析

第一讲 容器接口 BeanFactory和ApplicationContext接口的具体继承关系&#xff1a; ApplicationContext 间接继承了BeanFactory BeanFactory是父接口ApplicationContext是子接口&#xff0c;里面一些功能调用了BeanFactory BeanFactory的功能 表面上只有 getBean&#xff0…

Django Rest Framework 创建纯净版Django项目部署DRF

描述创建纯净版的Django项目和 Django Rest Framework 环境的部署 一、创建Django项目 1. 环境说明 操作系统 Windows11python版本 3.9.13Django版本 V4.2.202. 操作步骤(在Pycharm中操作) 创建Python项目drfStudy、虚拟环境 ​虚拟环境中安装 jdangopip install django==4.…

图解AUTOSAR_CP_NetworkManagementInterface

AUTOSAR 网络管理接口(Nm)详解 AUTOSAR 网络管理接口规范与实现指南 目录 1. 概述 1.1. 网络管理接口的作用1.2. 网络管理接口的特点 2. 网络管理接口架构 2.1. 架构概览2.2. 模块交互关系 3. 网络管理状态机 3.1. 状态定义3.2. 状态转换 4. 协调算法 4.1. 协调关闭流程4.2. 同…

java学习总结(八):Spring boot

一、SpringBoot简介 传统Spring开发缺点&#xff1a; 1、导入依赖繁琐 2、项目配置繁琐 Spring Boot是全新框架(更像是一个工具&#xff0c; 脚手架)&#xff0c;是Spring提供的一个子项目&#xff0c; 用于快速构建Spring应用程序。 随着Spring 3.0的发布&#xff0c;Spring 团…

openEuler24.03 LTS下安装MySQL8

前提条件 拥有openEuler24.03 LTS环境&#xff0c;可参考&#xff1a;Vmware下安装openEuler24.03 LTS 步骤 卸载原有mysql及mariadb sudo systemctl stop mysql mysqld 2>/dev/null sudo rpm -qa | grep -i mysql\|mariadb | xargs -n1 sudo rpm -e --nodeps 2>/dev/…

【失败了】LazyGraphRAG利用本地ollama提供Embedding model服务和火山引擎的deepseek API构建本地知识库

LazyGraphRAG测试结果如下 数据&#xff1a; curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt -o ./ragtest/input/book.txt 失败了 气死我也&#xff01;&#xff01;&#xff01;对deepseek-V3也不是很友好啊&#xff0c;我没钱prompt 微调啊&#xff0c;晕死…

ccfcsp3402矩阵重塑(其二)

//矩阵重塑&#xff08;其二&#xff09; #include<iostream> using namespace std; int main(){int n,m,t;cin>>n>>m>>t;int c[10000][10000];int s0,sum0;int d[10000],k[100000];for(int i0;i<n;i){for(int j0;j<m;j){cin>>c[i][j];d[s…

Unity Shader - UI Sprite Shader之简单抠图效果

Sprite抠图效果&#xff1a; 前言 在PhotoShop中我们经常会用到抠图操作&#xff0c;现在就用Shader实现一个简单的抠图效果。 实现原理&#xff1a; 使用当前像素颜色与需要抠掉的颜色相减作比较&#xff0c;然后与一个指定的阈值比较以决定是否将其显示出来&#xff1b; U…

【Mac】安装 Parallels Desktop、Windows、Rocky Linux

一、安装PD 理论上&#xff0c;PD只支持试用15天&#xff01;当然&#xff0c;你懂的。 第一步&#xff0c;在 Parallels Desktop for Mac 官网 下载 Install Parallels Desktop.dmg第二步&#xff0c;双击 Install Parallels Desktop.dmg 第三步&#xff0c;双击安装Paralle…

学习单片机需要多长时间才能进行简单的项目开发?

之前有老铁问我&#xff0c;学单片机到底要多久&#xff0c;才能进行简单的项目开发&#xff1f;是三个月速成&#xff0c;还是三年磨一剑&#xff1f; 今天咱们就来聊聊这个话题&#xff0c;我不是什么高高在上的专家&#xff0c;就是个踩过无数坑、烧过几块板子的“技术老友”…

centos操作系统上传和下载百度网盘内容

探序基因 整理 进入百度网盘官网百度网盘 客户端下载 下载linux的rpm格式的安装包 在linux命令行中输入&#xff1a;rpm -ivh baidunetdisk_4.17.7_x86_64.rpm 出现报错&#xff1a; 错误&#xff1a;依赖检测失败&#xff1a; libXScrnSaver 被 baidunetdisk-4.17.7-1.x8…

蓝牙系统的核心组成解析

一、硬件层&#xff1a;看得见的物理载体 1. 射频模块&#xff08;Radio Frequency Module&#xff09; 专业描述&#xff1a;工作在2.4GHz ISM频段&#xff0c;支持GFSK/π/4 DQPSK/8DPSK调制方式 功能类比&#xff1a;相当于人的"嘴巴"和"耳朵" 发射端…

go的gmp

参考链接&#xff1a;https://www.bilibili.com/video/BV19r4y1w7Nx Golang的GMP调度模型(协程调度器)是其并发编程的核心。GMP代表Goroutine、Machine和Processor三个关键组成部分。Goroutine是Go语言中的轻量级线程&#xff0c;Machine是操作系统的线程&#xff0c;Processor…

Vue3-高级特性

一、Vue中自定义指令 1.认识自定义指令 在Vue的模板语法中我们学习过各种各样的指令&#xff1a;v-show、v-for、v-model等等&#xff0c;除了使用这些指令之外&#xff0c;Vue也允许我们来 自定义自己的指令。 注意&#xff1a;在Vue中&#xff0c;代码的复用和抽象主要还是…

基于CPLD电力/轨道交通3U机箱开关量输出板(DO)

板卡简介&#xff1a; 本板为开关量输出板&#xff08;DO&#xff09;&#xff0c;采用固态继电器用于电平输出或负载驱动&#xff0c;典型输出高电平为DC110V&#xff0c;低电平为0V。 性能规格&#xff1a; 电源&#xff1a;DC5V&#xff0c;DC3.3V&#xff0c;DC15V&#…

【C++经典例题】反转字符串中单词的字符顺序:两种实现方法详解

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;C经典例题 期待您的关注 目录 问题描述 基于快慢指针的解法 基于索引的解法 两种方法的比较 问题描述 在处理字符串相关的问题…