假设你在问(感谢@VittorioRomeo的假设):
如何在不调用函数的情况下声明函数是noexcept?
您可以使用noexcept运算符来执行此操作,因为其操作数是未评估的操作数.
换句话说,您可以这样做:
void f(int) noexcept { }
void f(int, int) { }
int main() {
static_assert(noexcept(f(0)), "!");
static_assert(not noexcept(f(0, 0)), "!");
}
Run Code Online (Sandbox Code Playgroud)
f在任何情况下都不会被调用,这就是未评估操作数的(我说)性质.
最有趣的部分是,std::declval如果你没有变量用作参数而你不知道如何构造它,你可以将它与它结合起来.
举个例子:
#include<utility>
struct S { S(int) {} };
void f(S) noexcept { }
int main() {
static_assert(noexcept(f(std::declval<S>())), "!");
}
Run Code Online (Sandbox Code Playgroud)
请注意S,即使它没有默认构造函数,我也不必传递任何东西来构造.
这通常足以解决不传递参数的要求.