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

C++ 默认函数参数的有效表达式,c++,c++-faq,C++,C++ Faq,函数或成员函数中默认参数的所有可能的有效表达式类型是什么?在函数参数类型的变量赋值上下文中正确的任何类型 编辑 编译过程中的默认参数是根据类型正确性等进行评估的,但在运行时之前不会计算它们,也不会进行赋值。您可以将尚未定义的类的构造函数指定为默认参数,只要该类是在函数使用点定义的,就可以了。。。实际计算/赋值发生在函数调用期间,而不是函数声明/定义时 示例: #include <iostream> void foo( int a = std::rand()) { std::co

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

在函数参数类型的变量赋值上下文中正确的任何类型

编辑
编译过程中的默认参数是根据类型正确性等进行评估的,但在运行时之前不会计算它们,也不会进行赋值。您可以将尚未定义的类的构造函数指定为默认参数,只要该类是在函数使用点定义的,就可以了。。。实际计算/赋值发生在函数调用期间,而不是函数声明/定义时

示例:

#include <iostream>

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

int main( void )
{
 foo();

 return( 0 );
}
#包括
void foo(int a=std::rand())
{

std::cout这在C++03标准的第8.3.6节中有详细说明。它基本上是指任何不依赖于局部范围内任何内容的表达式,因此任何依赖于局部变量、函数参数或“This”的表达式排除。

您需要更具体一些。我的问题是故意泛泛的。我想知道我可以使用哪些类型的表达式作为默认参数。所以不仅仅是寻求帮助修复错误。·一个不能使用的特殊表达式是
void()不幸的是VisualC++ 10接受了它。除此之外,与一般表达式相比,参数默认表达式没有限制。(除非你考虑不可复制类型,否则这不是对表达式类型的限制,而是对类型的限制)。如果你对语法范畴感兴趣,那么就可以参考C++ BNF语法。CHIRS和HTH。这是错误的。你可以把变量分配给变量,这些变量只能在运行时确定,但是你不能用它们作为默认参数。例如,你可以做<代码> int=STD::RAND()/CUT>,但是你不能做<代码>空格类::Foo。(int a=std::rand())
.Oops,对不起。我又让我错误的先入为主了。@EmileCormier编译过程中的默认参数是根据类型正确性等进行计算的,但它们不会计算,并且在运行时之前不会进行赋值。您可以将尚未定义的类的构造函数指定为默认参数,并且很好,只要类是在函数使用点定义的……实际的计算/赋值发生在函数调用过程中,而不是函数声明/定义点。+1感谢您的澄清,再次对我的疯狂行为表示歉意。:-)这很好地补充了AzzA的答案。我希望我能接受这两个答案。