У вас довольно много гибкости. value2
должно быть выражением, которое действительно в точке объявления функции («действительным» я подразумеваю, что имена, которые он использует, находятся в области видимости и т. Д.), И его тип должен быть неявно конвертирован в Type2
, как и для любых инициализатор. value2
оценивается каждый раз, когда вызывается функция. Так, например:
#include <vector>
#include <iostream>
int i;
void foo(std::vector<int> v = std::vector<int>(i)) {
std::cout << v.size() << "\n";
}
int main() {
i = 1;
foo();
i = 2;
foo();
}
С правой инициализаторе, Type2
может быть даже тип ссылки:
void bar(int &j = i);
Да, это правильно. Любые типы и константные преобразования должны отображаться во время компиляции в [tag: C++]. –