1

当函数返回引用时,该属性[[nodiscard]]似乎不起作用。

此代码给出了预期的警告:

int a;

[[nodiscard]] int get()
{
    return a;
}

int main()
{
    get();
}

但是,即使使用以下代码,此代码也可以毫无问题地编译-Wall -Wextra -pedantic

int a;

[[nodiscard]] int& get()
{
    return a;
}

int main()
{
    get();
}

两者之间的唯一区别是该函数在第二个测试中返回一个引用。

我的编译器版本是g++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0.

这是编译器中的正确行为还是错误?如果这是故意的,那是什么原因呢?

4

0 回答 0