【发布时间】:2015-03-26 08:42:05
【问题描述】:
如果有类似的问题,请指导我,我安静地搜索了一段时间,但没有找到任何东西。
背景:
我只是在玩耍,发现了一些我无法完全解释的行为...... 对于原始类型,看起来当存在隐式转换时,赋值运算符 = 与显式赋值相比需要更长的时间。
int iTest = 0;
long lMax = std::numeric_limits<long>::max();
for (int i=0; i< 100000; ++i)
{
// I had 3 such loops, each running 1 of the below lines.
iTest = lMax;
iTest = (int)lMax;
iTest = static_cast<int>(lMax);
}
结果是 c 样式转换和 c++ 样式 static_cast 平均执行相同(每次不同,但没有明显差异)。并且它们都优于隐式分配。
Result:
iTest=-1, lMax=9223372036854775807
(iTest = lMax) used 276 microseconds
iTest=-1, lMax=9223372036854775807
(iTest = (int)lMax) used 191 microseconds
iTest=-1, lMax=9223372036854775807
(iTest = static_cast<int>(lMax)) used 187 microseconds
问题:
为什么隐式转换会导致更大的延迟?我可以猜测它必须在int溢出的分配中检测到,因此调整为-1。但是任务中到底发生了什么?
谢谢!
【问题讨论】:
-
我猜你的基准测试有缺陷。
-
尝试改变测试的顺序。也许它总是第一个花费时间最长的。此外,这里看起来 100000 太小了。让测试更长。
标签: c++ casting static-cast