你能说我怎么断言,是函数noexcept(没有传递参数)?感谢。
答案 0 :(得分:6)
假设您要求(感谢@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)), "!");
}
在任何情况下, f
都不会被调用,这就是未评估操作数的(我说) nature 。
最有趣的部分是,如果你没有变量用作参数而你不知道如何构造它,你可以将它与std::declval
结合起来。
举个例子:
#include<utility>
struct S { S(int) {} };
void f(S) noexcept { }
int main() {
static_assert(noexcept(f(std::declval<S>())), "!");
}
请注意,即使它没有默认构造函数,我也不必传递构造S
的任何内容。
这通常足以解决传递无参数的要求。
答案 1 :(得分:0)
假设你问:
如何在不调用函数的情况下断言函数为
noexcept
?
答案是你不能,因为noexcept
说明符可能在重载之间有所不同。例如:
int a(int) noexcept;
int a(int, int);
// What would `noexcept(a)` mean?