默认函数参数的有效表达式

时间:2012-02-15 01:39:48

标签: c++ c++-faq

函数或成员函数中默认参数的所有可能类型的有效表达式是什么?

2 个答案:

答案 0 :(得分:5)

在赋值给函数参数类型的变量的上下文中是正确的。

修改
编译期间的默认参数是根据类型正确性等进行评估的,但它们不会被计算,并且在运行时才会进行赋值。你可以指定一个尚未定义的类的构造函数作为默认参数,只要在函数使用点定义了类就可以了......实际的计算/赋值发生在函数调用期间,而不是在函数调用时功能声明/定义。

示例:

#include <iostream>

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

int main( void )
{
 foo();

 return( 0 );
}

Program output on ideone.com

1804289383

答案 1 :(得分:4)

这在C ++ 03标准的8.3.6节中有详细说明。它基本上等于任何不依赖于局部范围内任何东西的表达式,因此任何表达式依赖于局部变量,函数的参数或者&#34;这个&#34;被排除在外。