std::bind有多少个参数(VC11只支持4个)

How many arguments to std::bind (VC 11 only supports 4)

本文关键字:VC11 支持 4个 参数 bind 多少 std      更新时间:2023-10-16

我正在玩Visual Studio 11的开发者预览版。

我偶然发现的一个缺点是std::bind只支持4个函数参数。

我在C++11标准文件中找不到任何关于这方面的内容。是否定义了最小数量的参数,或者这一切都取决于实现?

在VC11中,您可以通过设置_VARIADIC_max来增加可变模板仿真方案使用的最大参数数。默认值为5。

请参见此处:http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx

如果您需要更多的参数(例如,您使用VC9 SP1编译代码或者使用6元组的VC10),有一个逃生舱口。您可以定义_VARIADIC_MAX项目范围介于5和10之间(包括5和10)(默认值为5)。增加它将使编译器消耗更多内存,并且可能要求您使用/Zm选项为PCHes保留更多空间。

实际上,这意味着VC11还不支持可变模板。然而,他们可以硬编码超过四个。Boost库一直使用最多10个参数的样板(例如,在details目录中检查signals2)来完成这项工作。四个论点是一个非常小的数字。

它是一些依赖于实现的值。如果超过了参数的数量,实现可能会崩溃或做一些其他愚蠢的事情。实际的C++11实现在这里使用可变模板(VC++还没有这个功能),所以它们的限制对每个人来说都绰绰有余。

这是未定义行为的一种情况,超出了实现限制。这与你有一个1TB的文件试图输入编译器,但内存不足没有什么不同。