c++标准的3.4.3.1节中有这个语句的一个例子
An example for this statement in section 3.4.3.1 of the C++ standard?
谁能贴一个有用的例子来说明(1.4)。
如果限定id的嵌套名称说明符指定了一个类,那么在嵌套名称说明符之后指定的名称将在类的作用域中查找(10.2),下面列出的情况除外。名称应代表该类或其基类之一的一个或多个成员(第10条)。[注:类成员可以在其潜在作用域中的任何点使用限定id引用(3.3.7)。]上述名称查找规则的例外情况如下:
(1.1) -按
中指定的方式查找析构函数名(1.2)——转换函数id的转换类型id的查找方式与类成员中的转换类型id的查找方式相同访问(见3.4.5);
(1.3)—template-id的模板参数中的名称在整个后缀表达式出现的上下文中查找。
(1.4) -查找在using声明(7.3.3)中指定的名称也可以找到隐藏在同一作用域(3.3.10)中的类或枚举名称。
这是CWG 400(引用N0905)的决议,该决议质疑以下代码是否格式良好:
struct A { int i; struct i {}; };
struct B { int i; struct i {}; };
struct D : public A, public B { using A::i; void f (); };
void D::f () { struct i x; }
在标准中增加了项目符号,以明确using A::i
将 struct i { }
和 int i
带入D
,从而使struct i x
格式良好。 我没有检查引号,但我认为这个例子将是相关的
#include <iostream>
namespace N1
{
struct A
{
static int x;
};
}
using N1::A;
int x = 10;
int N1::A::x = 20;
int A = 30;
int main()
{
std::cout << A::x << std::endl;
}
程序输出为
20
在同一作用域中的是二义的。因此,您可以考虑修改后的示例
#include <iostream>
namespace N1
{
struct A
{
static int x;
};
int A = 30;
}
using N1::A;
int x = 10;
int N1::A::x = 20;
int main()
{
std::cout << A::x << std::endl;
}
在这两个程序中,int
类型的对象A的声明int A = 30;
隐藏struct A
的声明
相关文章:
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- 而不是那么多的 if 语句,我想要一个逻辑,我可以用一个语句或优化的方式来完成
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 有没有办法制作一个 c++ 宏(或类似的东西),它使用户语句被 while 循环的预定义函数包围?
- 尝试使用 indexOf 创建一个 if 语句来检查字符串是否包含字符.有一点麻烦
- 我收到一个断言错误,但是当我编写 cout 语句时,它会消失
- 我在c++中遇到了一个奇怪的错误,其中一个计算2个小整数加法的语句溢出到一个长值中
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- 在c++中的复制构造函数/一个声明语句中的初始化的延续中使用chain方法
- 我的代码应该接受一个数字,并返回字母等级或"Grade is not valid"但 else 语句不起作用
- C++ typedef 函数指针,并在一个语句中声明一个指针
- 编译器说这个函数必须返回一个值,但我已经有一个 return 语句
- 一个语句中没有多个 cout 的错误/警告
- 我的"if"语句中只有一个给出了准确的值,即使它们都是相同的结构
- 如何从这些语句中的每一个创建不同的函数?
- 这个基于范围的'for'语句需要一个合适的函数,但找不到任何函数
- 两个 cin / cout 语句合并为一个
- 案例语句不会前进到下一个语句
- 为什么我的代码在第一个 if 语句处中断?