调用 vector 的 back() 方法与存储值与调用 returns 不可预测值的方法相比,成本有多高?

How expensive are calls to vector's back() method vs. storing the value vs. calling a method that returns an unpredictable value?

想弄清楚与性能和编译有关的事情。 如果有人多次调用 v.back() 而不是像 T = v.back() 这样的事情,编译器会优化代码吗?为什么? 理论上,有人可以实现一个随机的 back() 方法。 back 的实现有什么特别之处可以让它更快吗?

如果编译器看不到它的实现,v.back() 的结果将不会被缓存。不过,假设它是内联的,编译器可以看到 v 的哪些成员对 v.back() 的 return 值有贡献。这可能很简单,类似于 begin+size-1。如果这两者都没有改变,编译器将意识到他们可以对该表达式执行标准的公共子表达式消除。