首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ 0x中的统一初始化,何时使用()而不是{}?

在 C++ 0x 中,统一初始化允许使用圆括号 () 和花括号 {} 来初始化变量。但是,在某些情况下,只能使用圆括号 (),而不能使用花括号 {}。

具体来说,当初始化的对象是一个非聚合类型,并且该类型没有提供初始化列表时,只能使用圆括号 ()。这是因为圆括号 () 可以用来表示值的列表,而花括号 {} 则用于表示初始化列表。

例如,考虑一个类型为 std::vector<int> 的变量,由于该类型没有提供初始化列表,因此只能使用圆括号 () 进行初始化:

代码语言:cpp
复制
std::vector<int> v(3, 4); // 使用圆括号 () 初始化

而如果该类型提供了初始化列表,则可以使用花括号 {} 进行初始化:

代码语言:cpp
复制
std::vector<int> v{3, 4, 5}; // 使用花括号 {} 初始化

需要注意的是,当使用花括号 {} 初始化时,如果初始化列表中只有一个元素,则需要在该元素后面加上逗号,以避免与圆括号 () 的初始化方式混淆:

代码语言:cpp
复制
std::vector<int> v{3,}; // 使用花括号 {} 初始化,注意逗号

总之,在 C++ 0x 中,统一初始化允许使用圆括号 () 和花括号 {} 来初始化变量,但在某些情况下,只能使用圆括号 (),而不能使用花括号 {}。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++关于指针初始化使用NULL理解

1、严禁使用未被初始化指针:C++创建指针时候,只分配存储地址内存,并不会分配存储数据内存,所以指针可能指向任何位置。   ...(1)使用解除运算符(*)之前,一定要对指针初始化,否则若声明指针刚好指向程序代码位置会导致一些很隐蔽错误。    (2)未被初始化之前禁止指针之间赋值。...2、对NULL理解 一开始想不明白:如果给一个指针初始化成NULL之后不是就代表,指针指向一块内存单元了吗,那应该可以直接往里面填值,可是实际却不可以。...引用网友win_hate在话题“关于NULL不严谨”的话来说:“如果说有谁不严谨了,那必定是读取0位置程序员,不是C。...所以NULL就像安全带,将指针悬空,避免程序员因为大意犯下一些不必要错误。

2.7K100

C++核心准则T.5:结合使用泛型和面向对象技术应该增强它们效果不是成本

天人菊 T.5: Combine generic and OO techniques to amplify their strengths, not their costs T.5:结合使用泛型和面向对象技术应该增强它们效果不是成本...泛型和面向对象技术是互补。...静态协助动态:使用静态多态技术实现动态多态接口。...动态帮助静态:提供通用,舒适静态边界接口,但是内部进行动态分发,这样就可以提供一致对象布局。示例代码引入了和std::shared_ptr删除器一样类型消除机制。...在类模板,非虚函数只有在被使用时才会实例化-但是虚函数任何时候都会实例化。这会使代码膨胀,并且因为实例化根本不用功能而过度约束通用类型。要避免这个问题,即使标准库有时也会犯这样错误。

57020

C++11基础学习系列一

---- 概述 C++11标准越来越趋于稳定和成熟,国外c++11如火如荼国内却依然处于观望期。每当提到C++很多程序员都很抵触,特别是学术界呼声更高一些。...初始化与赋值 在C++初始化是创建变量并赋予初始值因此叫初始化,赋值操作是更新对象值即将右值更新到操作符左侧对象。...C++11新增了列表初始化,由花括号括起来,如下: int a = {12}; int b{12}; 声明与定义 在C++如果在代码中使用变量,必须先声明该变量。...定义是指在初次使用变量时就需要定义变量。变量可以多次声明,但只能定义一次。 Complex Type C++ 复合类型(Complex Type)有引用、指针、类等。...decltype使用表达式不是一个变量时,则返回表达式结果对应类型。

91140

C++系列笔记(二)

【导读】《21天学通C++》这本书通过大量精小短悍程序详细全面的阐述了C++基本概念和技术,包括管理输入/输出、循环和数组、面向对象编程、模板、使用标准模板库以及创建C++应用程序等...声明指针如下: int *pInteger = NULL; #初始化指针 使用引用运算符(&)获取变量地址 可以声明一个int指针来储存变量地址: int* pInteger = &age...new分配内存最终都需要使用对应delete进行释放 delete Pointer; delete[] Pointer PS: delete只能释放new创建内存,不是用于包含任何地址内存。...= 24; const int* const pInteger = & HoursInDay 务必初始化指针变量,如果不能将指针初始化为new返回有效地址或它有效变量,可将其初始化为NULL。...检查使用new发出分配请求是否得到满足 C++提供了两种确保指针有效方法,默认方法是使用异常,即如果内存分配失败,将引发std::bad_alloc异常。这将导致应用程序中断执行。

18320

关于堆栈讲解(我见过最经典)

3、全局区(静态区)(static)—,全局变量和静态变量存储是放在一块初始化全局变量和静态变量在一块区域, 未初始化全局变量和未初始化静态变量在相邻另一块区域。...另外,在WINDOWS下,最好方式是用VirtualAlloc分配内存,他不是在堆,也不是在栈是直接在进程地址空间中保留一快内存,虽然用起来最不方便。但是速度快,也最灵活。...cl第二种则要先把指针值读到edx,在根据edx读取字符,显然慢了。...那么这些变量在内存是如何存放呢?程序又是如何使用这些变量呢?下面就会对此进行深入讨论。下文中C语言代码如没有特别声明,默认都使用VC编译release版。...了解C++朋友都知道,C++可以使用new关键字来动态分配内存。

2.2K20

【一通百通】CC++std标准总结

C/C++发展很多版本标准,sunsky(本人)早就想理理std标准了,让大家有个清晰了解。...当然,您不希望在ISO C程序中使用它们,但将它们放在可能包含在编译完成头文件是有用-ㄧ。备用预定义宏,如__unix__和__vax__也可用,有或没有-ㄧ。...例如, -std = c90关闭那些不符合ISO C90 GCC某些功能,比如asm和typeof 关键字,不是其他GNU扩展没有在ISO C90意义,如省略中期?: 表现。...例如 -std = gnu90 -Wpedantic 警告C ++风格'//“评论, -std = gnu99 -Wpedantic 才不是。...另外,请大家请注意下,C几乎上不再更新了,慢慢转向C++统一(这话是国外c/cpp论坛),大家有空多关注C++14/17发展吧,新特性还是能振奋人心

93530

关于byte[]字节传输大端和小端小议

当前存储器,多以byte为访问最小单元,当一个逻辑上地址必须分割为物理上若干单元时就存在了先放谁后放谁问题,于是端(endian)问题应运而生了,对于不同存储方法,就有大端(big-endian...endian格式存放数据,motorola系列CPU采用是big endian,ARM则同时支持 big和little,网络编程,TCP/IP统一采用大端方式传送数据,所以有时我们也会把大端方式称之为网络字节序...特别需要注意是,C/C++语言编写程序里数据存储顺序是跟编译平台所在CPU相关 JAVA编写程序则唯一采用big endian方式来存储数据。这里我就只讨论C/C++语言情况。...main(void ){ unsigned int x =0x12345678; unsigned char *p = (unsigned char *)&x; printf("%0x...%0x %0x %0x",p[0],p[1],p[2],p[3]); return 0; }    --------------鸣谢(NULL)作者,本篇文章只供自己学习,若原始作者能够有建议,

1.5K50

C++修炼之路】26.C++11(语法糖)

但是到06年时候,官方觉得2007年肯定完不成C++ 07,而且官方觉得2008年可能也 完不成。最后干脆叫C++ 0x。x意思是不知道到底能在07还是08还是09年完成。...二.统一列表初始化 2.1 {}初始化 在C++98,标准允许使用花括号{}对数组或者结构体元素进行统一列表初始值设定。...(初始化列表)使用范围,使其可用于所有的内置类型和用户自定义类型,使用初始化列表时,可添加等号(=),也可不添加。...开辟空间就是根据std::initializer_listsize()大小开辟。...C++11废弃auto原来用法,将其用于实现自动类型腿断。这样要求必须进行显示初始化,让编译器将定义对象类型设置为初始化类型。 实际上在C++初窥门径已经学习过。

40100

【C++11】{}初始化、std::initializer_list、decltype、STL新增容器

但是到06年时候,官方觉得2007年肯定完不成C++ 07,而且官方觉得2008年可能也完不成。最后干脆叫C++ 0x。x意思是不知道到底能在07还是08还是09年完成。...统一列表初始化 首先声明一下: 这个列表初始化和我们类和对象那里学初始化列表不是一个概念,是不同。...2.1 {}初始化 在C++98,标准允许使用花括号{}对数组或者结构体元素进行统一列表初始值设定。...然后: C++11列表初始化也可以适用于new表达式 另外: 创建对象时也可以使用列表初始化方式调用构造函数初始化 比如我们之前写过日期类: class Date { public:...initializer_list是C++11引入一种特殊类型,用于简化初始化列表使用。它可以在构造函数或函数参数以列表形式传递一组值。

16410

C++数据类型

Union) 自定义数据结构:用struct或者class定义类 POD:Plain Old Data,用来表明C++中和C相兼容数据类型,在C++可以用is_pod::value判断是否是...内置类型 Tips:C++整型大小因编译器和操作系统不同不同,通常人们假定short是16位,int是32位,long是32位,long long是64位。...实际开发我们仅使用C++内置整型int,如果程序需要大小不同整型,那么: 在合适情况下,推荐用size_t和ptrdiff_t 我们可以认为int至少32位,如果需要使用64位整数,那么使用...因为无法令引用重新绑定到另一个对象,因此引用必须初始化 因为引用不是一个对象,所以不能定义引用引用 指针 指针是指向(point to)另外一种类型复合类型。 1....使用未经初始化指针是引发运行时错误一大原因,如果使用了未经初始化指针,那么指针所占空间的当前内容将被当成一个地址值,当这个地址值指向内存空间中正好有内容时,就可能引发难以预料后果。

92520

C++系列笔记(三)

【导读】《21天学通C++》这本书通过大量精小短悍程序详细全面的阐述了C++基本概念和技术,包括管理输入/输出、循环和数组、面向对象编程、模板、使用标准模板库以及创建C++应用程序等...Human Tom; Tom.DateBirth="1970"; 使用指针运算符(->)访问成员 如果对象是使用new在自有储存区实例化,或者有指向对象指针,则可以使用指针运算符(->)来访问成员属性和方法...例如:Human::DateOfBirth指的是在Human类声明变量DateOfBirth,::DateOfBirth表示全局作用域中变量DateOfBirth。...: Name(InputName) , Age(InputAge) { //代码 } }; 初始化列表由包含在括号当中参数声明后面的冒号标识,冒号后面列出了各个成员变量及其初始化值...深复制:所以要将浅复制参数复制变成地址传递,即按参数引用传递不是进行二进制复制。

20410

C++ Primer Plus 第03章 数据处理 学习笔记

C++,不同整型使用不同内存量,使用内存越大,可表示数值范围越大。...要知道系统整数最大长度,可以使用C++工具来检查类型长度。 首先使用sizeof运算符返回类型或变量长度,单位为字节。 climits包含符号常量(预处理方式)来表示类型限制。...C / C++三种计数方法: 十进制(第一位为1~9,基数为10)----> dec 八进制(第一位为0,基数为8) ----> oct 十六进制(前两位以0x0X开头,基数为16,0~9和a~f...指数为负数意味着除以10乘方,不是乘以10乘方。...强制转换通用格式如下: (typename) value //来源于C语言 typename (value) // C++ 4.4 C++11auto声明 在初始化声明,如果使用关键字auto

80900

C++初始化坑你也遇到过吗?

谈及C++初始化,我们都知道要在变量定义时候给它赋初值。确实,在每次定义时候就初始化不仅可以避免脏数据产生,还能增加代码可读性。但是,你知道这其中有多少陷阱吗?...,但a,c都被赋予了默认值,b是不确定值。...段,即完成变量初始化。...所以,这个坑其实是C++初始化列表坑,初始化列表定义说明,如果初始化列表数量比定义数量少,那么未被定义到值将会被赋予默认值!...首先,在我设备上,int是4字节,所以buff_2总共40字节,memset会对40个1字节赋值0X01,不是对10个4字节赋值0X01。所以不要用memset对非字符型数组赋初值!

43630

C++ primer》--第1,2章小结

5、C++,把负值赋给unsigned对象是合法,其结果是该负数对该类型取值个数求模后值,如果把-1赋给8位unsigned char 那么结果就是255。...C++每一个变量都有特定类型,该类型决定了变量内存大小和布局、能够存储与该内存取值范围以及可运用在该变量上操作集。     2.C++关键字 ?...例如通常写成index不是Index或者INDEX 标识符应使用能帮组记忆名字 包含多个词标识符书写为在每个词之间添加一个下划线,或者每个内嵌第一个字母都大写 9、变量初始化    有两种初始化方式...可以通过使用extern关键字声明变量名不定义他。...赋值为1,其他是隐式初始化依次为2,3,4    3.每个enum都定义一种唯一类型 15、头文件: 头文件用于声明不是用于定义(头文件包含在多个源文件,所以不应该含有变量或者函数定义,有三个例外

865100

iOS内存管理:从MRC到ARC实践

self.name = @"qqstock"; _name = @"qqstock"; 不知道是不是所有从 C/C++ 转过来程序员都遇到过类似的迷惑和愤怒。...与 C/C++ 传统内存管理方式相比,MRC 是不是显得非常智能?是不是更加方便?...首先,强引用依然保留 MRC 方式,因为这样实现方式代价很低; 其次,一旦出现弱引用,则将内存对象在系统建立映射表;一旦内存对象因为所有强引用归零释放,则将所有弱引用指针归零(指向 nil)——...首先:使用 retain 类型初始化方法给 weak 和 assign 类型变量赋值时,编译器会报警。 ?...还有,各种类方法初始化 autorelease 对象,依然是在 runloop 结束时候析构 retain 类型对象,却是在代码模块终止时候析构

1.2K50

Java数据类型

注:引用数据类型大小统一为 4 个字节,记录是其引用对象地址! 整型变量 概要 整型用于表示没有小数部分数值,它允许是负数。...整型范围与运行Java代码机器无关,这正是Java程序具有很强移植能力原因之一。于此相反,C和C++程序需要针对不同处理器选择最有效整形。...十六进制数,要求 0x0X 开头,如:0x15 。...二进制浮点数不能精确表示0.1,0.01,0.001这样10负次幂。并不是所有的小数都能可以精确用二进制浮点数表示。...属性用于定义该类或该类对象包含数据。 2. 属性作用范围是整个类体。 3. 属性默认初始化: 在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认值对其初始化

95810

堆和栈区别

了解C++朋友都知道,C++可以使用new关键字来动态分配内存。...(共 9 页) 前言 您是否是动态分配 C/C++ 对象忠实且幸运用户?您是否在模块间往返通信中频繁地使用了“自动化”?您程序是否因堆分配运行起来很慢?不仅仅您遇到这样问题。...部分) 在程序使用堆来动态分配和释放对象。在下列情况下,调用堆操作:  事先不知道程序所需对象数量和大小。 对象太大不适合堆栈分配程序。...某些情况下,这些堆是操作系统堆层,语言运行时堆则通过大块分配来执行自己内存管理。不使用操作系统堆,而使用虚拟内存函数更利于堆分配和块使用。 典型堆实现由前、后端分配程序组成。...它能够使用一套参数进行初始化,这些参数表示并发级别、对象大小和保持在空闲列表元素数量等。分配高速缓存处理程序对象维持自己私有空闲实体池(不超过指定阀值)并使用私有保护锁。

1.3K90

【重磅干货】手把手教你动态编辑Xilinx FPGA内LUT内容

行地址为1;bit14-bit7是列地址,需要注意是,列地址是不分clock region,比如图2.2X0Y2、X0Y3第一列,地址是相同,另外,CLB、BRAM、DSP等列是统一编址,列地址可以利用...后来发现,进行这项研究是十分必要,研究结果表明,LUT初始化值与rbt文件对应内容,并不是相等,二者存在特定映射关系, 且SLICEL和SLICEMLUT,映射关系是不一样。...那是不是可以说Verilog代码LUT初始值bit顺序(图2.4)和rbtbit顺序,是一致呢?...FPGALUT初始化值。...初始化值),Configuration Packets主要用于传输一些配置相关指令,如读写配置寄存器。

3.7K72

C++基础-类和对象

面向对象编程有四个重要基础概念:抽象、封装、继承和多态。本文整理 C++ 类与对象基础内容,涉及抽象和封装两个概念。《C++基础-继承》一文讲述继承概念。《C++基础-多态》一文讲述多态概念。...当把鸟、鱼、老虎等称作“动物”时,也是在使用抽象。 基类是一种抽象,可以让用户关注派生类共同特性忽略各派生类细节。类也是一种抽象,用户可以关注类接口本身忽视类内部工作方式。...初始化列表是一种简写形式,将相关数据成员初始化列表写在函数名括号后,从而可以省略函数体相应数据成员赋值语句。...声明构造函数时务必考虑使用关键字 explicit,以避免隐式转换。 务必将类成员声明为 std::string 和智能指针类(不是原始指针),因为它们实现了复制构造函数,可减少您工作量。...因此,除非指定了,否则结构成员默认为公有的(类成员默认为私有的);另外,除非指定了,否则结构以公有方式继承基结构(类为私有继承)。

97020
领券