C++ 如何提供默认参数而不重复前面的参数?

C++ 如何提供默认参数而不重复前面的参数?,c++,function,parameters,named,C++,Function,Parameters,Named,我搜索了许多资源,在它们提供的示例中,看起来如下所示: void bar(int a = 4, char b = 'A') { } 根据这一点,可以称之为: 但是它给了我一个错误标识符“b”未定义。 我正在使用Visual Studio 2015 Update 3 Enterprise 有没有关于如何只指定第二个参数的建议?您链接的论文只是一个建议。您尝试使用的机制是(目前)不是标准中定义的C++的一部分。因此,您不能期望编译器实现它 目前没有其他标准的解决办法。如果要设置某些参数,还需

我搜索了许多资源,在它们提供的示例中,看起来如下所示:

void bar(int a = 4, char b = 'A') 
{ 
}
根据这一点,可以称之为:

但是它给了我一个错误
标识符“b”未定义
。
我正在使用Visual Studio 2015 Update 3 Enterprise


有没有关于如何只指定第二个参数的建议?

您链接的论文只是一个建议。您尝试使用的机制是(目前)不是标准中定义的C++的一部分。因此,您不能期望编译器实现它

目前没有其他标准的解决办法。如果要设置某些参数,还需要在函数声明中提供其前面的所有参数

您可以使用类似的工具或自己实现类似的工具来用用户代码模拟该特性。这是否是一个好主意还有待讨论,它并不太常见,因此可能会让其他程序员感到困惑



这可能是一个语言问题:“建议”是有人说会好的东西,而不是事物的状态。

一个可能的解决方案可能是使用
std::bind
和该名称空间中定义的占位符。例如:

void bar(int a = 4, char b = 'A') {
}

using namespace std::placeholders;
auto f = std::bind(bar, 2, _2);
f('Z'); // equivalent to bar(2, 'Z');

正如另一个答案中所建议的,没有办法让
std::bind
表达式使用函数声明中的默认参数,但它至少允许您只指定其中一个参数。

顺便说一句,这个建议可能永远不会实现(据我所知),因为它与C++函数的技术性相冲突,使可链接的库与任何事物不兼容。closed@MarcusM我不太明白这怎么会使这个问题偏离主题。@BaummitAugen,我们把问题作为离题的问题来结束,因为作者的代码中有一个打字错误。误解提案的作用几乎是一样的;它可以通过将作者指向错误来修复,这是一个低级的“词法分析”性质,对其他访问者来说没有未来的价值(除非误解/打字错误可能发生在其他人身上)。FWIW,我现在看到的最有效的用法是使用
bar(“b”_arg='Z')
语法,但我相信它使用了GCC和Clang支持的非标准语言特性。
void bar(int a = 4, char b = 'A') {
}

using namespace std::placeholders;
auto f = std::bind(bar, 2, _2);
f('Z'); // equivalent to bar(2, 'Z');