C++定义和初始化string对象实例详解
作者:老边 发布时间:2022-08-05 06:03:00
在c++当中,标准类型string来代表可变长的字符串序列,使用string需要加载string 头文件,而方法定义在命名空间std当中,所以使用的基本结构:
#include <string>
int main(){
using std::string;
string str1 = "hello world";
return 0;
}
当然也可以结合之前的输入输出部分:
#include <iostream>
#include <string>
int main(){
using namespace std;
string str1 = "hello world";
cout << str1 << endl;
return 0;
}
这里可以看出,std命名空间包含了iostream头文件当中的cout和endl,也包含了string 头文件当中的string
定义string
和其他的变成语言的思路类似,标准类型string可以定义string类型的字符串(嘿嘿嘿,好像一句废话),常见的定义方式如下:
string str1; //声明一个空的字符串
string str2 = str1; //声明一个str2,它是str1的副本
string str3 = "hello world"; //上面做过的一种写法,str3是字符串字面值的副本
string str4(10,'b'); //str4的内容是 bbbbbbbbb ,这里要注意第二给参数需要是字符而不是字符串
这里聊到了一个概念叫做字面值,其实就是字面值常量,形如38这样一个一望而知的值被称为字面值常量,每个字面值常量都对应一种数据类型,我们上面聊的就是string类型的字面值常量,但是需要细致区分的是字符和字符串字面值:
'a' //字符字面值
"hello world" //字符串字面值
除了肉眼可见的长度和引号(尽管看得见,必须要仔细)的区别外,编译器会在每个字符串后面添加一个空字符'\0',因此字符串字面值的长度要比肉眼所见的+1
初始化string
当对象创建是获得了一个特定的值,我们就可以说这个值被初始化了,通过string类型我们来看一下初始化的分类:
全面初始化
使用花括号包围的初始化被称为全面初始化,这个是c++11的新特性,比如:
string str4(10,'b');
默认初始化
定义变量的时候没有指定初始的值,这种也是初始化,被称为默认初始化,变量的值的类型由变量的类型来决定,比如:
string str1;
拷贝初始化
使用等于号进行初始化就是拷贝初始化,因为实际上是编译器把等号右侧的初始值拷贝到等号左侧的新创建的对象当中,(如果基于面向对象理解:直接初始化实际上是要求编译器选择参数最匹配的一般构造函数)比如:
string str2 = str1;
string str3 = "hello world";
直接初始化
嘿嘿嘿,域拷贝初始化相反,不使用等号进行初始化(其实就是不进行赋值拷贝动作),就是直接初始化,比如:
string str4(10,'b');
来源:https://juejin.cn/post/7174168026697170980
猜你喜欢
- 前言今天来做个打方块的小游戏,继续熟悉kotlin的语法,更多关于kotlin的语法大家可以参考这篇文章:https://www.jb51.
- 已知字符串“aabbbcddddeeffffghijklmnopqrst”编程找出出现最多的字符和次数,要求时间复杂度小于O(n^2)/**
- 前言在我们用户登录的时候,为了安全性考虑,会增加验证码的功能,这里采用的是google的kaptcha;spirngboot是轻便,独立,使
- 最近被.net winform中的控件布局搞困惑了,由于控件都是使用Dock方式的,操作起来也是比较方便,如果最大化,窗口大小调整等,都可以
- 一、前言我们经常会遇到业务想看debug日志的问题,但是debug日志频繁打印会对日志查看有影响,且日志多对系统也会有一定的压力,因此,如果
- 初始化sp 内部将数据放到 xml 文件中,加载时首先会将硬盘中文件读取到内存中,这样加快了访问速度这次从源码开始,看看里面具体做了什么//
- Rmb.javapublic class Rmb { /** *人民币的基本信息和操作 *@auth
- 导读本文主体为单项链表和双向链表的反转以及简单的测试,以便于理解链表相关的算法题目。链表特点便于增删数据,不便于寻址在内存中属于跳转结构单链
- 文件上传是开发中十分常见的功能,在servlet3.0之前,实现文件上传需要使用一些插件技术,比如:commons-fileuploadsm
- 本文实例讲述了Android实现ListView异步加载的方法。分享给大家供大家参考,具体如下:@Override publi
- 之前有个兄弟给我的卷一re了帖子,我当时没有g,m,直到他把它删掉才后悔莫及,人生最痛苦的事情莫过于此。。。。。。好,即便如此,我们还是满怀
- 前言:本文源码基于spring-framework-5.3.10。mvc是spring源码中的一个子模块!一、RequestMappingH
- 一、什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型
- 前文本章是关于Java流程控制语句的最全汇总,本篇为汇总中篇。流程是人们生活中不可或缺的一部分,它表示人们每天都在按照一定的流程做事。比如出
- 影响排序效率的一般从3个方面比较:数据比较的次数,数据移动的次数,内存空间占用的大小。我们就冒泡排序、选择排序、插入排序、快速排序做一个总的
- RMI 介绍RMI (Remote Method Invocation) 模型是一种分布式对象应用,使用 RMI 技术可以使一个 JVM 中
- SpringMVC通过模型视图ModelAndView渲染视图大致流程代码样例1.准备工作A.因为文中用到jsp,所以需要引入jsp标准标签
- 最近在一本J2EE的书中看到了很不错的对集合框架的说明文章,筛选后发上来和大家共享,集合框架提供管理对象集合的接口和类.它包含接口,类,算法
- 快速排序实现: namespace QuickSort { class QuickSort { public static void Sor
- 用一个7 x 7的矩形表示迷宫,0和1分别表示的是通路和障碍。通过设计编写程序找到蓝色小球达到蓝色旗子的路线思路:构建一个迷宫(用二维数组)