Допустимые выражения для аргументов функции по умолчанию - PullRequest
5 голосов
/ 15 февраля 2012

Каковы все возможные типы допустимых выражений для аргумента по умолчанию в функции или функции-члене *

Ответы [ 2 ]

5 голосов
/ 15 февраля 2012

Все, что является правильным в контексте присвоения переменной типа параметра функции.

Редактировать
Аргументы по умолчанию во время компиляции оцениваются с точки зрения корректности типа и т. Д., Ноони не рассчитываются и никакое присвоение не выполняется до времени выполнения.Вы можете указать конструктор класса, который еще должен быть определен, в качестве аргумента по умолчанию, и это нормально, если класс определен в точке использования функции ... Фактическое вычисление / назначение происходит во время вызова функции, а не в точкеобъявления / определения функции.

Пример:

#include <iostream>

void foo( int a = std::rand())
{
  std::cout << a << std::endl;
}

int main( void )
{
 foo();

 return( 0 );
}

Вывод программы на ideone.com :

1804289383

4 голосов
/ 15 февраля 2012

Это подробно описано в разделе 8.3.6 стандарта C ++ 03. В основном это означает любое выражение, которое не зависит ни от чего в локальной области видимости, поэтому любое выражение, которое зависит от локальных переменных, параметров функции или «this», исключается.

...