- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章简述C++11就地初始化与列表初始化由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1.就地初始化 。
1.1简介 。
在C++11之前,只能对结构体或类的静态常量成员进行就地初始化,其他的不行.
1
2
3
4
5
6
|
class
C
{
private
:
static
const
int
a=10;
//yes
int
a=10;
//no
}
|
在C++11中,结构体或类的数据成员在申明时可以直接赋予一个默认值,初始化的方式有两种,一是使用等号“=”,二是使用大括号列表初始化的方式。注意,使用参考如下代码:
1
2
3
4
5
6
7
|
class
C
{
private
:
int
a=7;
//C++11 only
int
b{7};
//或int b={7}; C++11 only
int
c(7);
//error
};
|
注意,小括号初始化方式不能应用于就地初始化.
1.2就地初始化与初始化列表的先后顺序 。
C++11标准支持了就地初始化非静态数据成员的同时,初始化列表的方式也被保留下来,也就是说既可以使用就地初始化,也可以使用初始化列表来完成数据成员的初始化工作。当二者同时使用时,并不冲突,初始化列表发生在就地初始化之后,即最终的初始化结果以初始化列表为准。参考如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <iostream>
using
namespace
std;
class
Mem
{
public
:
Mem(
int
i,
int
j):m1(i),m2(j) {}
int
m1 = 1;
int
m2 = {2};
};
int
main()
{
Mem mem(11,22);
cout<<
"m1="
<< mem.m1<<
" m2="
<<mem.m2<<endl;
}
|
程序输出结果:
m1=11 m2=22 。
2.列表初始化 。
C++11之前主要有以下几种初始化方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
//小括号初始化
string str(
"hello"
);
//等号初始化
string str=
"hello"
;
//POD对象与POD数组列表初始化
struct
Studnet
{
char
* name;
int
age;
};
Studnet s={
"dablelv"
,18};
//纯数据(Plain of Data,POD)类型对象
Studnet sArr[]={{
"dablelv"
,18},{
"tommy"
,19}};
//POD数组
//构造函数的初始化列表
class
Class
{
int
x;
public
:
Class():x(0){}
};
|
这么多的对象初始化方式,不仅增加了学习成本,也使得代码风格有较大出入,影响了代码的可读性和统一性。从C++11开始,对列表初始化(List Initialization)的功能进行了扩充,可以作用于任何类型对象的初始化,至此,列表初始化方式完成了天下大一统.
1
2
3
4
5
6
7
8
9
10
|
class
Test
{
int
a;
int
b;
public
:
C(
int
i,
int
j);
};
Test t{0,0};
//C++11 only,相当于 Test t(0,0);
Test* pT=
new
Test{1,2};
//C++11 only,相当于 Test* pT=new Test{1,2};
int
* a =
new
int
[3]{1,2,0};
//C++11 only
|
此外,C++11列表初始化还可以应用于容器,终于可以摆脱 push_back() 调用了,C++11中可以直观地初始化容器:
1
2
3
|
//C++11 container initializer
vector<string> vs={
"first"
,
"second"
,
"third"
};
map<string,string> singers ={{
"Lady Gaga"
,
"+1 (212) 555-7890"
},{
"Beyonce Knowles"
,
"+1 (212) 555-0987"
}};
|
因此,可以将C++11提供的列表初始化作为统一的初始化方式,既降低了记忆难度,也提高的代码的统一度.
以上就是简述C++11就地初始化与列表初始化的详细内容,更多关于C++11就地初始化与列表初始化的资料请关注我其它相关文章! 。
原文链接:https://cloud.tencent.com/developer/article/1394301 。
最后此篇关于简述C++11就地初始化与列表初始化的文章就讲到这里了,如果你想了解更多关于简述C++11就地初始化与列表初始化的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
做数据分析、科学计算等离不开工具、语言的使用,目前最流行的数据语言,无非是MATLAB,R语言,Python这三种语言,但今天小编简单总结了python语言的一些特点及平常使用的工具等。 为
服务器和应用程序日志记录是开发人员、运维人员和安全团队了解应用程序在其生产环境中运行状态的重要工具。 日志记录使运维人员能够确定应用程序和所需组件是否运行平稳,并检测是否发生了异常情况,以便他们能
了解程序集如何在C#.NET中加载 我们一直在处理库和NuGet软件包。不管是好是坏,高级.NET开发人员都需要了解.NET运行时如何加载程序集。 这些库依赖于其他流行的库,并且有很多共享的
目录 Java注解(annotation)简单上手 1、什么是注解? 2、java内置注解 3、注解的基本运 总结 Java注解(a
系列最后一篇来说说Python中的类与对象,Python这门语言是无处不对象,如果你曾浅要了解过Python,你应该听过Python是一种面向对象编程的语言,所以你经常可能会看到面向“对象”编程这类
tf.reverse_sequence()简述 在看bidirectional_dynamic_rnn()的源码的时候,看到了代码中有调用 reverse_sequence()这一方法,于是又回去
目录 (一)hog特征提取 (二)dlib库 (三)卷积神经网络特征提取(cnn) 人脸图像特征提取方法
代码如下: <?php /* 边学边做的,为方便自己翻阅而发布,更为得到高人指点而发布,欢迎高手指点...... 【提示】本例通过
我是一名优秀的程序员,十分优秀!