合法和非法使用`::`

问题描述 投票:0回答:3

我调查了这样的代码。例如:

typedef C;
C::T x; //illegal;

typedef C::T c_t; //legal
c_t y;

class C;
   typedef int T;
endclass

为什么第一次使用::是非法的而第二次使用合法的?

syntax verilog system-verilog
3个回答
0
投票

SystemVerilog要求必须先知道类型标识符是一种类型,然后才能引用该类型。在此示例源自的1800-2017 LRM第6.18节的开头对此进行了说明。

x声明的问题是C::T在那时不是已知类型。

当您将typedef放在C::T前面时,解析器知道它必须是一种类型,没有其他有效的选择。


0
投票

双冒号用于范围解析运算符。它用于访问包中的类和类中的静态数据。

您可以在this reference manual的第14页中找到良好的用法示例。


0
投票

这是类范围解析运算符。它用于指定在类范围内定义的标识符。因为类和其他作用域可以具有相同的标识符,所以类作用域解析运算符唯一地标识特定类的成员,参数或局部参数。

更多详细信息,请参见IEEE 1800-2017,第8.23类范围解析运算符。

© www.soinside.com 2019 - 2024. All rights reserved.