C++ C++;0到大小(0)的样式和转换

C++ C++;0到大小(0)的样式和转换,c++,substr,C++,Substr,在以下代码中使用size\u t(0)是否与使用0相同 const string foo = "testing"; const size_t pos = foo.find("i"); string name = foo.substr(size_t(0), pos); 也就是说,当我只把0转换为size\u t(0)?如果是,一种形式是否优于另一种形式?我的猜测是size\u t(0)是最好使用的,因为它使转换显式化。另一方面,有些程序员可能会考虑 SIEZHETT(0)< /代码>冗长?我猜实

在以下代码中使用
size\u t(0)
是否与使用
0
相同

const string foo = "testing";
const size_t pos = foo.find("i");
string name = foo.substr(size_t(0), pos);
也就是说,当我只把
0
转换为
size\u t(0)
?如果是,一种形式是否优于另一种形式?我的猜测是
size\u t(0)
是最好使用的,因为它使转换显式化。另一方面,有些程序员可能会考虑<代码> SIEZHETT(0)< /代码>冗长?我猜实际上没人在乎这两种情况

也就是说,当我只输入0时,它是否转换为大小\u t(0)

转换是隐式的,因为:


因此,您的强制转换是多余的。

您正在将0类型强制转换为相同的参数类型,这是一种很好的做法,但不是必需的,因为这将被隐式转换

string substr ( size_t pos = 0, size_t n = npos ) const;

退房。

这不是原因。它是隐式的原因不能是成员函数是使用默认参数声明的。@dalle:使强制转换多余的不是默认值,而是参数是size\t,因此,
0
将自动转换为size\u t。@JerryCoffin:是的,原因是0将自动转换为size\u t,但它与函数声明无关。@dalle:函数声明指定了参数类型。@JerryCoffin:实际函数与它无关,最好是描述隐式转换,如4 [CONV]和4.5 [CON.PROM]。IMO,这是相当差的实践——通常应该避免多余的铸件。不,不是,但不是首选。我可以说,C++中的许多不同的语法支持类型转换,<代码>类型(ARG)。在适用性、可读性、明确性等方面不是最好的?为什么不是?可能是因为
type
可以作为函数调用读取?是的,也可以作为类的实例化,等等。编写
(type)arg
要好得多,因为它只意味着一件事——类型转换。那么随便的读者就不用猜了<代码>静态_cast(arg)在专业化方面更好。好的,谢谢您的解释
string substr ( size_t pos = 0, size_t n = npos ) const;