编译期间模板优化中的Static_cast

static_cast in template optimization during compilation

本文关键字:Static cast 优化 编译      更新时间:2023-10-16

假设我有一个或多或少像这样的函数(伪代码,不是真正的,所以请不要考虑它有多没用:p):

template <typename T>
T function()
{
 std::vector<size_t> a = {1, 2, 3, 4, 5};
 T r = 0;
 for (size_t i=0; i<a.size(); ++i)
 {
  r += static_cast<T>(a[i]);
 }
 return r;
}

现在我想知道如果T=size_t,编译器是否会优化static_cast。我知道,如果T将是一个int,没有太多的事情要做,但它会被优化出来或在编译时解决吗?

对于本机类型,任何现代编译器都应该将static_cast优化为相同的类型。这里是对相同问题的另一个回答,该问题表明具有非平凡复制构造函数的类型可能会导致开销。

将static_cast转换为相同类型会引入运行时开销吗?