gpt4 book ai didi

c++ - noexcept 依赖于成员函数的 noexcept

转载 作者:可可西里 更新时间:2023-11-01 17:35:25 27 4
gpt4 key购买 nike

考虑:

class test {
private:
int n;

int impl () const noexcept {
return n;
}

public:
test () = delete;
test (int n) noexcept : n(n) { }

int get () const noexcept(noexcept(impl())) {
return impl();
}
};

海湾合作委员会拒绝:

test.cpp:27:43: error: cannot call member function 'int test::impl() const' with
out object
int get () const noexcept(noexcept(impl())) {

类似地:

test.cpp:27:38: error: invalid use of 'this' at top level
int get () const noexcept(noexcept(this->impl())) {

test.cpp:31:58: error: invalid use of incomplete type 'class test'
int get () const noexcept(noexcept(std::declval<test>().impl())) {
^
test.cpp:8:7: error: forward declaration of 'class test'
class test {

这是符合标准的预期行为,还是 GCC (4.8.0) 中的错误?

最佳答案

this 的使用规则因 core language issue 1207 而改变,实际上是出于另一个原因,但在某种程度上也会影响 noexcept 表达式。

之前(在 C++03 之后,但当 C++11 还在写的时候),this 不允许在函数体之外使用。 noexcept 表达式不是正文的一部分,因此无法使用 this

之后,this 可以在 cv-qualifier-seq 之后的任何地方使用,noexcept 表达式出现在它之后,如代码你的问题清楚地说明了。

看起来这个问题的GCC实现是不完整的,只允许尾随函数返回类型的成员函数,但标准已经开放了不止于此。 我建议将此作为错误报告(如果之前未报告过)。 GCC bugzilla 上已将此报告为 bug 52869 .

无论值(value)如何,clang 都接受 C++11 模式下的代码。

关于c++ - noexcept 依赖于成员函数的 noexcept,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18878029/

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