<分区>
代码:
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;
void f(const char* s) {
for (size_t i = 0; i < strlen(s); i++) {
printf("%c ", s[i]);
}
}
void g(const vector<int>& v) {
for (size_t i = 0; i < v.size(); i++) {
printf("%d ", v[i]);
}
}
编译链接:https://godbolt.org/z/PCi5yg
你会看到汇编代码:
- 在函数
f()
中,每次都会调用strlen(s)
; - 但是在函数
g()
中,v.size()
只被调用一次。
这是为什么?
参数是常量,在内循环中不改变参数。