当前位置: 首页 > 知识库问答 >
问题:

在存在歧义的情况下使用限定ID访问类成员

司寇旺
2023-03-14
template<int N> struct A{ int v = N; using D = A; };
struct B : A<1>, A<2> {};
using D = A<1>;
int main() { return B{}.D::v; }

4如果类成员访问中的id-expression是窗体的限定id-id

class-name-or-namespace-name::...

首先在对象表达式([class.member.lookup])的类中查找.->运算符后面的class-name-or-namespace-name,如果找到,则使用名称。否则,它将在整个后缀表达式的上下文中查找。

因此,首先D必须在structB中查看,但在那里是不明确的。事实上,Clang报告了一个错误:

error: member 'D' found in multiple base classes of different types

共有1个答案

艾泉
2023-03-14

根据最近对该措辞的澄清,Clang是正确的,现在它说

如果对成员限定名称(即嵌套名称说明符的终端名称([expr.prim.id.qual])且不依赖)的限定查找未找到任何结果,则对其进行非限定查找。

现在不存在有问题的“名字,如果找到”,这可能意味着唯一性。

 类似资料:
  • 随着Java7的发布,出现了,它允许用户像使用底层字节码一样调用方法。特别是,类提供工厂方法来创建方法句柄以访问类成员: 查找对象上的工厂方法对应于方法、构造函数和字段的所有主要用例。工厂方法创建的每个方法句柄都是特定字节码行为的功能等价物。 那么,有没有理由仍然使用像/这样的反射功能,或者这些方法由于引入了更快的方法句柄而实际上已经过时了? 注意,虽然方法句柄是在Java7中引入的,但我的问题主

  • 有了Nexus5,OSM6.0。1,然后在照相机应用程序中选择一张照片并进行“共享”。在目标应用程序中,它从intent和文件路径获取Uri。当新建FileInputStream(新文件(pathToFile))时,它抛出:打开失败:EACCES(权限被拒绝) 这是因为未授予“存储”权限,但不希望要求用户专门授予“存储”权限。是否有其他方法可以在没有“存储”权限的情况下读取文件? 文件路径是这样提

  • 问题内容: 在Mongoose的早期版本(针对node.js)中,可以选择使用它而不定义架构 但是在当前版本中,“ noSchema”功能已被删除。我的架构可能会经常更改,并且实际上不适合已定义的架构,因此,是否有一种新的方式在猫鼬中使用无架构的模型? 问题答案: 我想这就是您要寻找猫鼬严密的东西 选项:严格 严格选项(默认情况下启用)可确保未在架构中指定的添加到模型实例的值不会保存到数据库中。

  • 问题内容: 我有个问题。我想防止用户访问页面而不登录jsf2。当用户直接将受限制的页面网址写入浏览器时,他/她应该看不到该页面。就像上述情况那样,他/她必须被重定向到登录页面。如何以编程方式执行此操作? 问题答案: 这取决于您如何设置登录名。您似乎正在使用本地认证,其中将登录用户设置为会话范围的受管Bean的属性。因为使用Java EE提供的容器管理登录名,已经考虑了防止访问受限页面。 假设你已经

  • 问题内容: 我试图将配置(例如URLs / etc)放入资源文件夹中,以供实用程序类使用。但是,我不想从任何地方的活动中传递上下文。我希望能够通过路径名(似乎使用assess /是为此用途设计的)来访问资源,而无需使用上下文来访问资源。 在这种特殊情况下,我希望单例实例化时在配置中使用某些东西。除了实例化期间的那一次之外,它不需要任何资源。因此,每次调用getInstance()时都必须传递Con