类型转换是否会使程序运行缓慢?

Nau*_*us1 1 c++ type-conversion

标题很明显.在我的例子中,为了简单起见,我避免使用例如unsigned int而不是int,因为它使编码更快更简单.(顺便说一句,我使用的是Android IDE,CppDroid)

然而,IDE经常提醒我隐式转换,例如,For循环,其中递增的变量(int)与向量的大小(size_t/unsigned int)进行比较.

我的问题是:类型转换需要时间吗?如果是这样,与其他常见操作相比,它们需要多长时间?在转换确实需要一些时间的情况下,是否值得正确定义变量以避免转换?

Ser*_*eyA 7

你的问题是有效的,尽管目标是误解的.正确定义变量至关重要,但不是因为神秘的性能.

这是为了确保正确性.将无符号整数与带符号整数进行比较是一个滴答作响的炸弹,以及(最常见的)size_t与整数进行比较.

例如,请考虑以下代码段:

for (int i = 0; i < vec.size(); ++i) { }
Run Code Online (Sandbox Code Playgroud)

如您所知,此代码可能导致未定义的行为!如果向量的大小大于有符号整数可以保持的最大大小(通常是64位系统的情况),则整数将溢出,这是未定义的.编译器可能只是完全删除循环,如果它可以证明向量的大小大于最大int!

类似的看(和也是不正确的)线

for (unsigned int i = 0; i < vec.size(), ++i) { }
Run Code Online (Sandbox Code Playgroud)

不会导致未定义的行为,但它会在向量大小大于最大int时挂起程序.也没有好处.

当然,正确的做法是

for (decltype(vec.size()) i = 0; i < vec.size(), ++i) { }
Run Code Online (Sandbox Code Playgroud)

  • 不应该`vec.size(),++ i`是`vec.size(); ++ i`? (3认同)