Каковы ограничения типа параметра по умолчанию в переполнении стека?

void foo(Type1 a, Type2 b = value2)

Могу ли я знать, каковы ограничения типа 2 для параметра, который принимает значение по умолчанию? Я считаю, значение value2 типа2 должно быть решаемым во время компиляции.
Например, целое число. Это правильно?

1

Решение

У вас довольно много гибкости. 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);
1

Другие решения

value2 должен быть преобразован во время компиляции в Type2,

1

Да исправить.

Единственное ограничение — переменная по умолчанию должна быть последней. Вы можете иметь несколько переменных по умолчанию, просто убедитесь, что все они находятся в конце. Не смешивайте с не по умолчанию.

0
По вопросам рекламы [email protected]