4

第 7.3.3 段。的 C++2003 标准规定

对类成员使用声明应为成员声明。

这意味着以下给出了语法错误:

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

目前尚不清楚为什么应该禁止这样做。

4

1 回答 1

0

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

在此处输入图像描述

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

auto& var = S1::var;

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

于 2012-06-20T19:29:42.697 回答