0751180

练习7.51: vector 将其单参数的构造函数定义成explicit的,而string则不是,你觉得原因何在?

【出题思路】

从参数类型到类类型的自动转换是否有意义依赖于程序员的看法,如果这种转换是自然而然的,则不应该把它定义成explicit的;如果二者的语义距离较远,则为了避免不必要的转换,应该指定对应的构造函数是explicit的。

【解答】

string接受的单参数是const char*类型,如果我们得到了一个常量字符指针(字符数组),则把它看作string对象是自然而然的过程,编译器自动把参数类型转换成类类型也非常符合逻辑,因此我们无须指定为explicit的。

与string相反,vector接受的单参数是int类型,这个参数的原意是指定vector的容量。如果我们在本来需要vector的地方提供一个int值并且希望这个int值自动转换成vector,则这个过程显得比较牵强,因此把vector的单参数构造函数定义成explicit的更加合理。

本页共13段,501个字符,1122 Byte(字节)