首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • C++进阶之C++11》【列表初始化 + 右值引用】

    C++11引入列表初始化的历程是什么? ,C++11 在此基础上进行了大幅扩展和统一,让更多类型(比如:标准库容器、复杂自定义类等 )都能使用类似简洁的 {} 语法初始化 并且优化了很多初始化逻辑和特性 ,后续 C++ 标准不断完善,让初始化操作变得更灵活 、易用和规范 在 C++11 标准里: 设计目标:统一初始化方式 C++11 引入列表初始化(也叫 {} 初始化 ),核心目标是让所有对象都能用统一的 {} 语法初始化 不管是内置类型(如:int、double C++11 initializer_list:容器批量初始化的解决方案 问题背景:容器初始化的痛点 虽然 C++ 列表初始化({})让语法更简洁,但早期直接用 {} 初始化容器(如:vector )仍有不便 在 C++ 中,左值引用和右值引用是两种不同类型的引用,它们的核心区别在于绑定对象的类型(左值或右值) 理解这两种引用是掌握 C++11 移动语义、完美转发等高级特性的基础。

    19010编辑于 2025-12-18
  • 来自专栏C++开发

    C++课程学习】:C++11C++发展,列表初始化,声明auto,typeid,decltype)

    C++学习笔记: https://blog.csdn.net/djdjiejsn/category_12682189.html 前言: C++11相对于C++98和C++03而言增加了大约140个新特性 虽然在标准中增加STL是个很重要的决定,但也因此延缓了C++标准化的进程。 1997年11月14日,联合标准化委员会通过了C++标准的最终草案。 1.2C++11: C++98是C++第一版的标准,C++03是对C++98中漏洞进行修复,C++11增加很多的新特性,和C++98/03有很大的区别了。 1998年C++委员会成立以来,就制定了一个五年计划,打算每五年进行一次新标准的发布。但是从03年到11年之间隔了8年,是因为委员会觉得在五年之内完不成新标准的发布,所以就一直拖,到2011年才发布。 2.1{}初始化: 原来的数组初始化等,用={}进行初始化,比如int a1[2]={1,2};这样的初始化方式。在C++11中,可以直接这样初始化。 一切都可以用列表初始化,并且可以省略=。

    33400编辑于 2025-01-20
  • 来自专栏跟Qt君学编程

    C++初始化

    ❝在C++中int类型可以看作为一个类,那么它就有以下的初始化方式。 ❞ int i; /* 默认初始化 */ int i = 0; /* 拷贝初始化 */ int i(0); /* 直接初始化 */ int *i = new int(); /* 值初始化 */ int i{0}; /* 列表初始化 */ std::vector<int> i{1, 2, 3}; /* 列表初始化 */

    38410发布于 2020-04-01
  • 来自专栏全栈程序员必看

    C++ vector初始化_vector>初始化

    = vec.end() ; ++i) { cout << *i << " ";} cout << endl; return ; } 总结起来有以下几个:       2列表初始化,2个拷贝 当然是用迭代器初始化,可以相互转换都可以,而且不要求容器和元素类型相同。

    1.5K40编辑于 2022-10-05
  • 来自专栏全栈程序员必看

    初始化磁盘_c++怎么初始化

    磁盘在联机后要初始化,同样也有两种方法,一种是调用IOCTL_DISK_CREATE_DISK,还有一种是调用WMI的Initialize方法。 1.首先说说简单的WMI的方法: 大致思路同博客:C++ 实现磁盘联机 先获取磁盘的id, 然后执行无参数方法Initialize 核心模块代码如下: wchar_t msftDiskObjectID GetLastError(); } CloseHandle(hFile); return retcode; } GPT磁盘类似,不同的地方在于传入的参数变成了GUID 核心代码在于CREATE_DISK结构的初始化发生了变化

    1.1K10编辑于 2022-09-29
  • 来自专栏软件开发 -- 分享 互助 成长

    C++初始化列表

    一、什么是初始化列表 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段 二、构造函数执行分为初始化和构造两个阶段,且初始化化阶段优先于计算阶段 三、一个好的原则是,能使用初始化列表的时候尽量使用初始化列表 因为初始化列表有时能少调用一次默认构造函数 四、必须要用初始化列表的时候 1.常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化 五 、成员变量是按照在类中声明的顺序被初始化的而不是在初始化列表中的顺序 struct foo 4 #include "stdafx.h" 5 #include<iostream> 6 using namespace std; 7 8 class A 9 { 10 public: 11 4 #include "stdafx.h" 5 #include<iostream> 6 using namespace std; 7 8 class A 9 { 10 public: 11

    1.1K90发布于 2018-02-05
  • 来自专栏全栈程序员必看

    C++数组初始化

    C++数组初始化 定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组 注意:C++使用new和delete在堆(自由存储区)上分配和释放动态数组。 动态数组初始化: 1. 元素只能初始化为元素类型的默认值,而不能像数组变量一样,用初始化列表为数组元素提供各不相同的初值。 2. 对于内置数据类型元素的数组,必须使用()来显示指定程序执行初始化操作,否则程序不执行初始化操作: int *pia = new int[10]; // 每个元素都没有初始化 int *pia2 = new 这种形式的字符串通常被称为C型字符串,因为以这样的方式定义字符串是在C语言中推出的,在C++一般使用string,而MFC中则定义了CString类。

    2.3K20编辑于 2022-09-09
  • 来自专栏c++

    c++】c++11(一)列表初始化,右值引用和移动语义

    这次带来的是C++中关于C++11这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢? 个 人 主 页: 默|笙 一、C++11 c++11c++发展以来的第二个主要版本,是从c++98开始的最重要的更新。 二、列表初始化 1. c++98和c++11里的{} C++98里传统的{}一般只能用于数组和结构体的构造,而到了C++11,它几乎能实现一切对象的初始化。{}初始化也被称为列表初始化。 {}初始化的过程中,可以直接省略掉=,不过习惯上还是加上=。 对于容器的insert/push操作就会变得很方便,不需要构造对象或匿名对象传递,可以之间用{}初始化之后直接传递。 与C++11里的std::initializer_list区分 可能会存在initializer_list构造函数和{}列表初始化分不清的情况,其实很好区分,它们有一个本质的区别。

    12310编辑于 2026-01-14
  • 来自专栏C/C++基础

    C++11就地初始化与列表初始化

    1.就地初始化 1.1简介 在C++11之前,只能对结构体或类的静态常量成员进行就地初始化,其他的不行。 1.2就地初始化初始化列表的先后顺序 C++11标准支持了就地初始化非静态数据成员的同时,初始化列表的方式也被保留下来,也就是说既可以使用就地初始化,也可以使用初始化列表来完成数据成员的初始化工作。 ); cout<<"m1="<< mem.m1<<" m2="<<mem.m2<<endl; } 程序输出结果: m1=<em>11</em> m2=22 2.列表<em>初始化</em> C++<em>11</em>之前主要有以下几种<em>初始化</em>方式: // * a = new int[3]{1,2,0}; //C++<em>11</em> only 此外,C++<em>11</em>列表<em>初始化</em>还可以应用于容器,终于可以摆脱 push_back() 调用了,C++<em>11</em>中可以直观地<em>初始化</em>容器 ---- 参考文献 [1]<em>C++</em> <em>11</em> 新特性 [2]深入理解C++<em>11</em>[M].2.7快速<em>初始化</em>成员变量

    5.1K10发布于 2019-02-22
  • 来自专栏全栈程序员必看

    C++ vector初始化_vector初始化大小

    一维向量 vector<int> vector_1D_1;//只定义向量 vector<int> vector_1D_2(n);//定义的同时初始化大小 vector<int> vector_1D_3( n,m);//定义的同时初始化大小为n,元素初始值为m //先定义变量,再初始化大小和初值 vector<int> vector_1D_4; vector_1D_4=vector<int>(n,m); x vector<vector<int> > vector_2D_5(n,vector_1D_3);//使用已知向量来初始化,第二维大小和vector_1D_3一样 三维向量 vector< vector );//仅指定第一维大小 vector< vector< vector<int> > > vector_3D_3(n,vector<vector<int>>(m,vector<int>(y)));//初始化维度大小为 n*m*y. vector< vector< vector<int> > > vector_3D_4(n,vector<vector<int>>(m,vector<int>(y,x)));//初始化维度大小为

    1.4K10编辑于 2022-11-04
  • 来自专栏巡天遥看一千河

    C++ 11 Atomic

    C++ 封装 我们都知道多核编程常用锁避免多个线程在修改同一个数据时产生race condition。当锁成为性能瓶颈时,我们又总想试着绕开它,而不可避免地接触了原子指令。 但对多核机器而言,这段代码可能难以正常运行: 线程1中的ready = true可能会被编译器或cpu重排到p.init()之前,从而使线程2看到ready为true时,p仍然未初始化。 即使没有重排,ready和p的值也会独立地同步到线程2所在核心的cache,线程2仍然可能在看到ready为true时看到未初始化的p。 通过这个简单例子,你可以窥见原子指令编程的复杂性了吧。 理解C++的原子操作 事实上,Sequentially-consistent ordering是目前绝大多数编译器的缺省设置。 C++11所规定的这6种模式,其实并不是限制(或者规定)两个线程该怎样同步执行,而是在规定一个线程内的指令该怎样执行。是的,我知道这部分的文档(规定)以及给出的例子里面,满屏都是多线程。

    1.4K31发布于 2021-03-24
  • 来自专栏Reck Zhang

    C++ 11 - singleton

    singleton // T must be: no-throw default constructible and no-throw destructible template <typename T> struct Singleton { private: struct object_creator { // This constructor does nothing more than ensure that instance() // is call

    55420发布于 2021-08-11
  • 来自专栏程序手艺人

    C++初始化列表

    13:10: error: uninitialized const member in ‘class Test’ Test t; 代表类中可以定义const成员变量, 但是面临的问题是: 如何初始化类中 const 成员变量 这时候引入本文的重点, 初始化列表出场: 类成员的初始化 C++ 中提供了初始化列表对成员变量进行初始化 语法规则 ClassName::ClassName() : m1(v1), m2(v1,v2),m3(v3) { //some other initialize operation } 注意事项 成员的初始化顺序与成员的声明顺序相同 成员的初始化顺序与初始化列表中位置无关 初始化列表先于构造函数的函数体执行 修改上述代码如下: #include<stdio.h> class Test { private: const int ci; public: 小结 类中可以使用初始化列表对成员进行初始化 初始化列表先于构造函数体执行 类中可以定义const 成员变量 const 成员变量必须在初始化列表中指定初值 const 成员变量为只读变量

    1.1K60发布于 2018-05-18
  • 来自专栏全栈程序员必看

    C++ vector 初始化大小

    一维数组 使用下面的代码可以初始化一个大小为n的一维数组 vector<int> dp(n); 二维数组 使用下面的代码可以初始化一个row 行col列的二维数组 vector<vector<int> > dp(row, vector<int>(col)); 三维数组 使用下面的代码可以初始化一个三维数组,维度分别为n1, n2, n3 vector<vector<vector<int>>> dp(n1

    90510编辑于 2022-11-04
  • 来自专栏数据分析与挖掘

    c++初始化列表

    #include<iostream> using namespace std; class Person{ public: int m_a; int m_b; int m_c; Person(int a,int b,int c) :m_a(a), m_b(b), m_c(c){} }; int main() { Person p(30,20,10); cout << p.m_a << p.m_b << p.m_c<<endl; system("paus

    52540发布于 2020-08-26
  • 来自专栏c语言,c++

    C++】C++11(统一列表初始化、声明、右值引用)

    统一的列表初始化 {}初始化 在C++98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。 当没有写构造函数时,无法用{}初始化自定义类型。写出构造函数后就可以,这是C++11的语法特性。本质上是通过{}构造一个A对象,然后通过拷贝构造给aa1。 std::initializer_list 如果使用{}初始化,像vector这种容器,我们无法知道每次初始化的参数个数是几个, 所以C++11对STL中的不少容器就增加 std::initializer_list 声明 auto C++11中废弃auto原来的用法,将 其用于实现自动类型腿断。这样要求必须进行显示初始化,让编译器将定义对象的类型设置为初 始化值的类型。 由上图可知,x不是i的引用。 nullptr 由于C++中NULL被定义成字面量0,这样就可能回带来一些问题,因为0既能指针常量,又能表示 整形常量。

    42310编辑于 2024-12-11
  • 来自专栏大数据

    C++一分钟之-C++11新特性:初始化列表

    C++11引入了一系列改进,极大地增强了语言的表达力和效率,其中初始化列表(Initializer Lists)是一个尤为重要的新特性。 本文将深入浅出地探讨初始化列表的使用、常见问题、易错点以及如何避免这些陷阱,并通过代码示例加以说明。 初始化列表基础 初始化列表允许在创建对象时直接初始化其成员变量,替代了传统的构造函数体内赋值。 没有默认构造函数 初始化顺序与成员声明顺序 成员变量的初始化顺序严格遵循它们在类声明中的顺序,而不是初始化列表中的顺序。 结语 初始化列表是C++11中的一项强大特性,它简化了对象的初始化过程,提升了代码的可读性和执行效率。正确理解和应用这一特性,能够使你的C++编程之旅更加顺畅。 然而,正如所有强大的工具一样,初始化列表也需谨慎使用,避免陷入常见的陷阱之中。通过本文的介绍和示例,希望能帮助你更好地掌握初始化列表的精髓,编写出更加高效、优雅的C++代码。

    62210编辑于 2024-06-22
  • 来自专栏编程学习之路

    C++】 解决 C++ 语言报错:数组初始化

    引言 数组初始化错误是 C++ 编程中常见的错误之一。当程序在声明和初始化数组时,未能正确指定数组的大小或未能正确地初始化数组元素,可能会导致编译错误、运行时错误或程序行为不可预测。 本文将深入探讨数组初始化错误的成因、检测方法及其预防和解决方案,帮助开发者在编写 C++ 程序时避免和处理数组初始化问题。 数组初始化的成因 数组初始化错误通常由以下几种原因引起: 未指定数组大小 当声明数组时未指定数组的大小,且未提供足够的初始化值时,会导致编译错误。 C++ 编程中常见的问题之一。 通过了解其成因、检测方法及预防和解决方案,可以帮助开发者在编写 C++ 程序时避免和处理数组初始化问题。

    58010编辑于 2025-05-25
  • 来自专栏学习

    C++】C++11

    1.C++11的发展历史 C++11C++ 的第⼆个主要版本,并且是从 C++98 起的最重要更新。它引⼊了⼤量更改,标准化了既 有实践,并改进了对 C++ 程序员可⽤的抽象。 C++03 与 C++11 期间花了 8 年时间,故⽽这是迄今为⽌最⻓的版本间隔。从那时起,C++ 有规律地每 3 年更新⼀次。 传统的{} C++11以后想统⼀初始化⽅式,试图实现⼀切对象皆可⽤{}初始化,{}初始化也叫做列表初始化。 {}初始化的过程中,可以省略掉= C++11列表初始化的本意是想实现⼀个⼤统⼀的初始化⽅式,其次他在有些场景下带来的不少便 利,如容器push/inset多参数构造的对象时,{}初始化会很⽅ 中的std::initializer_list 上⾯的初始化已经很⽅便,但是对象容器初始化还是不太⽅便,⽐如⼀个vector对象,我想⽤N个 值去构造初始化,那么我们得实现很多个构造函数才能⽀持

    58110编辑于 2025-02-05
  • 来自专栏叹世界

    C++ 11 新特性

    C++ 11 的一些新特性 原始字面量 R("string...") /text.cc 上面换了个行)"; std::cout << str << std::endl; } [Running] cd "/root/code-server/c11 -new/" && g++ 字符串字面量.cc -o 字符串字面量 && "/root/code-server/c11-new/"字符串字面量 ../.. exited with code=0 in 0.269 seconds nullptr 这个没什么好说的,替换 NULL 使用即可,这玩意不等于 0 auto & decltype 自动推导 auto 只能推导初始化了的变量 ret_type _ret) { return _ret } 要注意的是,函数模板默认参数没有函数默认参数的默认参数都必须在右边的限制,想放哪就放哪 委托构造函数 允许构造函数调用其他构造函数,建议在初始化列表中使用

    57710编辑于 2022-01-12
领券