c++ - 对类成员使用声明应为成员声明 (C++2003)

标签 c++

第 7.3.3 段。 C++2003 标准声明

Using declaration for a class member shall be a member declaration.

这意味着下面给出了一个语法错误:

struct S1
{
    static int var1;
};

using S1::var1;

虽然以下编译正常:

namespace N2
{
    int var2;
}

using N2::var2;

有人知道这背后的基本原理(如果有的话)吗?

此外,该标准给出了带有结构静态数据成员的显式示例,并告知它应该导致语法错误。 MS C++ 给出了这个错误:

cpptest1.cxx(9) : error C2885: 'S1::var1': not a valid using-declaration at non-class scope

目前还不清楚为什么要禁止它。

最佳答案

它不起作用的原因仅仅是因为标准禁止它。特别注意例子中的s:

enter image description here

作为解决方法,您可以说:

auto& var = S1::var;

使标准(以及所有编译器)更复杂以处理具有方便解决方法的异常情况并不能通过成本效益测试。

关于c++ - 对类成员使用声明应为成员声明 (C++2003),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11126203/

相关文章:

c++ - 如何仅使用标准库将 C++ 对象写入文件

c++ - 引用指针(int * const和arg)

c++ - 如果我在 block 中写入字符串文字,是否会从数据部分复制整个字符串数据?

用于灰度到 ARGB 转换的 C++ SSE2 或 AVX2 内在函数

c++ - C++ 中的滴答计数和毫秒

c++ - 有没有办法避免隐式转换为 void*?

c++ - Qt中的空文件

JavaCV透视校正

c++ - 为什么 constexpr 成员不能用于 static_assert?

c++ - 将文本文件的内容放入 QMessageBox