提问人:Emile Cormier 提问时间:2/15/2012 最后编辑:Emile Cormier 更新时间:6/20/2016 访问量:1255
默认函数参数的有效表达式
Valid expressions for default function arguments
答:
5赞
lapk
2/15/2012
#1
在赋值给函数参数类型的变量的上下文中正确的任何内容。
编辑
:编译期间的默认参数会根据类型正确性等进行评估,但不会计算这些参数,并且在运行时之前不会进行赋值。您可以将尚未定义的类的构造函数指定为默认参数,这很好,只要在函数使用时定义了类......实际的计算/赋值发生在函数调用期间,而不是在函数声明/定义时。
例:
#include <iostream>
void foo( int a = std::rand())
{
std::cout << a << std::endl;
}
int main( void )
{
foo();
return( 0 );
}
1804289383
评论
0赞
Emile Cormier
2/15/2012
这是错误的。您可以将只能在运行时确定的变量分配给变量,但不能将它们用作默认参数。例如,你可以做,但你不能做。int a = std::rand()
void Class::foo(int a = std::rand())
0赞
Emile Cormier
2/15/2012
哎呀,对不起。我让我错误的先入之见再次占了上风。
1赞
lapk
2/15/2012
@EmileCormier 编译期间的默认参数会根据类型正确性等进行评估,但不会计算它们,并且在运行时之前不会进行赋值。您可以将尚未定义的类的构造函数指定为默认参数,这很好,只要在函数使用时定义了类......实际的计算/赋值发生在函数调用期间,而不是在函数声明/定义时。
0赞
Emile Cormier
2/15/2012
+1 感谢您的澄清,再次对不起我的疯狂滑稽动作。:-)
4赞
Vaughn Cato
2/15/2012
#2
C++ 标准的第 8.3.6 节对此进行了详细说明。它基本上相当于任何不依赖于局部作用域中任何内容的表达式,因此任何依赖于局部变量、函数参数或“this”的表达式都被排除在外。
评论
0赞
Emile Cormier
2/15/2012
这与AzzA的回答相得益彰。我希望我能接受这两个答案。
评论
void()