两者之间是否有任何区别
cell.profilePic.image = nil
self.showProfilImage(uid: self.items[indexPath.row].user.uid!) { (image) in
cell.profilePic.image = image
}
和
std::vector<int> B;
B.resize(N);
还是第二种方法是第一种方法的缩写形式?
答案 0 :(得分:2)
性能是否有可衡量的差异?不,一点也不。
可读性上有区别吗?分配器版本更加简洁,一目了然。
生成的指令是否有所不同?取决于编译器及其选择。让我们来看看gcc:
int main() {
std::vector<int> B(1);
}
编译为:
call std::allocator<int>::allocator() [complete object constructor]
lea rdx, [rbp-17]
lea rax, [rbp-48]
mov esi, 1
mov rdi, rax
call std::vector<int, std::allocator<int> >::vector(unsigned long, std::allocator<int> const&)
lea rax, [rbp-17]
mov rdi, rax
另一种情况:
int main() {
std::vector<int> B;
B.resize(1);
}
编译为:
call std::vector<int, std::allocator<int> >::vector() [complete object constructor]
lea rax, [rbp-48]
mov esi, 1
mov rdi, rax
call std::vector<int, std::allocator<int> >::resize(unsigned long)
lea rax, [rbp-48]
mov rdi, rax
它们非常相似。差异可忽略不计。唯一的区别是分配器版本具有附加的LEA指令,用于加载std::allocator
(LEA进行内存寻址计算,但实际上不寻址内存。)优化器错误。
请记住,编译器优化不是标准的。就语言本身而言,这两个调用之间根本没有区别。