#include <iostream>
#include<string>
//第一个传入的string不会在内存中被复制,直接打印。 第二个会复制
void PrintString(const std::string& mystring, std::string mystring2) {
mystring2 += '!!!';
std::cout << mystring << std::endl;
std::cout << mystring2 << std::endl;
}
int main()
{
const char* name = "Veyron";//不加const关键字声明的话,会产生编译错误
//0,在ASCII码中代表的就是char的结尾:或者'\0' 转义为0
char name2[7] = { 'V' , 'e' , 'y' , 'r' , 'o' , 'n' , 0 };//char的本质就是Array
//string没有办法直接“string_Veyron”+“Hello”相加
std::string string_name = std::string("string_Veyron") + "Hello";
std::cout << name << std::endl;
PrintString(string_name, string_name);
std::cin.get();
}
- 运行结果:
-
Veyron string_VeyronHello string_VeyronHello!
- char的本质就是array中的一系列ASCII码表+结尾的0(或者说'\0')
- a string of text,是std模板的一部分
- string本质就是char 的Array,加上一堆对它的操作函数
以后学习数据结构,会写自己的data structures,并学习如何优化它 - std::string本质就是const char*
- string有很多的骚操作,细节比较多
- string的有效内存只存在only-read内存中
#include <iostream>
#include<string>
#include<stdlib.h>//标准函数库的头文件
int main()
{
const char* name = u8"Veyron";//utf8
const wchar_t* name2 = L"Veyron";//wchar_t所能表示的字符数远超char型
const char16_t* name3 = u"Veyron";//utf16: 2个bytes,16个bits
const char32_t* name4 = U"Veyron";//utf32: 4个bytes,32个bits
//string没有办法直接“string_Veyron”+“Hello”相加
std::string string_name = std::string("string_Veyron") + "Hello";
//但是
//C14特性中可以这么写:
//std::u32string string_name = U"string_Veyron"s + U"Hello";
//分行打印
const char* example = R"(Line1
Line2
line3
Lin4
)";
std::cout << name << std::endl;
std::cout << example << std::endl;
std::cout << strlen(name) << std::endl;
std::cin.get();
}
运行结果:
Veyron
Line1
Line2
line3
Lin4
6