gpt4 book ai didi

c++ - 类方法声明符中 noexcept 的行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:41 24 4
gpt4 key购买 nike

以下代码的预期行为是什么?
使用 GCC 时输出为 0,而使用 clang 时输出为 1。
哪一个是正确的?

#include <iostream>

static const bool ne = false;

struct a
{
a() noexcept(ne) {}
static const bool ne = true;
};

int main()
{
std::cout << noexcept(a()) << std::endl;
}

最佳答案

他们都是对的!这只是格式错误的代码。来自 [basic.class.scope] :

A name N used in a class S shall refer to the same declaration in its context and when re-evaluated in the completed scope of S. No diagnostic is required for a violation of this rule.

本节还包括示例:

[Example:

typedef int c;
enum { i = 1 };

class X {
char v[i]; // error: i refers to ::i
// but when reevaluated is X::i
int f() { return sizeof(c); } // OK: X::c
char c;
enum { i = 2 };
};
[...]

-end example ]

没有全局范围 ne,代码是有效的 - 但 gcc 无法编译它,因为 bug 70142 (仍未确认)。

关于c++ - 类方法声明符中 noexcept 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35940675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com