第二章介绍的内置类型是由C++语言直接定义的。这些类型,比如数字和字符,体现了大多数计算机硬件本身具备的能力,标准库定义了另外一组更具有更高级性质的类型,它们尚未直接实现到计算机硬件中————————————————————这段没看懂,P74
命名空间的using声明(头文件最好不用using声明)
std::cin
=编译器从作用域操作符(::)左侧名字所示的作用域中寻找右侧那个名字=要使用命名空间std中的名字cin。
每次使用cin都要声明std很繁琐,现在介绍一种最安全的方法:using声明(后面还会介绍另一种)
using std::cin;
=using声明,当我们使用名字cin时,从命名空间std中获取她(要注意,每个名字都需要独立的using声明!)
关于格式,和普通的声明变量不太一样:
using std::cout,std::cin; //error
using std::cin;using std::cout;using std::endl; // Ture
标准库类型string
string是可变长的字符序列,其定义在std命名空间。
note:C++标准对库类型所提供的操作做了详细规定(意味着有最好的使用指南,不需要你去猜),另一方面也对库的实现者做出一些性能上的需求(这些实现者基本上是领域牛人,可以基本相信),因此,标准库类型对于一般应用场合来说有足够效率(注意,只是效率,别的兼容性什么的不是重点)
初始化方法:
#include <iostream> #include <string> using std::cout; using std::endl; using std::string; int main() { //默认初始化,s1=空串 string s1; cout << s1 << endl; //s2是s1的副本,si是空串所以s2也是空串 string s2(s1); cout << s2 << endl; //和s2的初始化一样,只不过s2是用初始化列表初始化的 string s3 = s1; cout << s3 << endl; //s3是字面值value的副本(value这个字面值最后那个空字符没有拷贝到s4).
string s4("value"); cout << s4 << endl; //等价于s4的初始化,只不过s4是初始化列表初始化的。 //不能用花括号初始化列表初始化string string s5 = "value"; cout << s5 << endl; //s6初始化为连续10个字符c组成的串 string s6(10, 'c'); cout << s6 << endl; system("pause"); return 0; }
这有2个疑问,s4有没有一个空字符在最后面(即s4里有的空字符不一定是复制过去的而是定义时自己加的)?string定义的字符串末尾都有空字符?
/*验证: *1.是否string定义的字符串都有一个空字符在最后 *2.拷贝初始化后,虽然没有拷贝最后的空字符,但是该初始化后是否还是会自己加上一个空字符 */ #include <iostream> #include <string> using std::cout; using std::endl; using std::string; int main() { //验证1——结果是确实有一个空字符在最后 string s1 = "abc"; cout << s1[0] << s1[1] << s1[2] << "——" <<s1[3] << "——" <<endl; //验证2——结果是确实会自己加上一个空字符 string s2 = s1; cout << s2[0] << s2[1] << s2[2] << "——" << s2[3] << "—— " <<endl; system("pause"); return 0; } //先这样理解,这种验证比不得看机器码。
我们规定:
使用等号初始化一个变量,编译器把等号右侧的初始值拷贝到新创建的对象中去,这种操作称为拷贝初始化(copy initialization)
不使用等号的称为直接初始化(direct initialization)。
今天买的《Head First HTML与CSS》、《CSS权威指南》、《HTML5权威指南》到手了,以及图书馆借了《HTML5实战》。把这些书都翻了翻目录和开头一点内容,准备开始白天C++,晚上学前端的生活咯~
打算先把《Head First HTML与CSS》、《HTML5权威指南》交替着看完,然后开始看《HTML5实战》、《CSS权威指南》。这四本看完估计早毕业了~