2013-12-20 3 views
1
void foo(Type1 a, Type2 b = value2) 

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

+0

Да, это правильно. Любые типы и константные преобразования должны отображаться во время компиляции в [tag: C++]. –

ответ

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); 
+0

ОК, я вижу. Таким образом, по умолчанию значение по умолчанию может быть оценено во время выполнения и будет оцениваться во время выполнения каждый раз, когда эта функция вызывается? – KKKoo0

+0

@ KKKoo0. Да. Попробуйте объявить глобальный 'int i' и использовать' i ++ 'в качестве значения по умолчанию. – MSalters

1

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

0

Да, правильно.

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

 Смежные вопросы

  • Нет связанных вопросов^_^