没有 - 除非没有通过论证

时间:2016-12-07 14:57:53

标签: c++ c++11 noexcept

你能说我怎么断言,是函数noexcept(没有传递参数)?感谢。

2 个答案:

答案 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?