August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
初始化与赋值不同。一般而言,正确执行赋值之后,被赋值对象必须有一个值。而另一方面,初始化的任务是将一段未初始化的内存变为一个合法的对象。对几乎所有的类型来说,读写一个未初始化的变量的结果都是未定义的。对内置类型来说,这个问题对引用来说更为明显:
幸运的是,我们不能使用一个未初始化的引用。如果可以的话,r2=99就会将99赋予某个未指定的内存位置。这最终可能导致糟糕的结果或程序崩溃。
你可以使用=初始化一个引用,但不要被这种形式所迷惑。例如:
这仍然是一个初始化操作,将r绑定到x,而不是任何形式的值拷贝。
初始化和赋值的区别对很多用户自定义类型也是十分重要的,例如string和vector,其中被赋值对象拥有资源,而该资源最终需要释放(参见5.3节)。
参数传递和函数返回值的基本语义是初始化(参见3.6节)。例如,传引用方式的参数传递就是如此。
Read now
Unlock full access