C++ two-phrase name lookup.

C++使用two-phase name lookup.在parse模版的时候,第一遍找所有的非dependant-name.而把所有的dependant name留到实例化模版的时候查找。在这个例子中,如果仅仅写'a',那么编译器不认为这是个dependant name,所以就在第一遍parse的时候进行name lookup.但这时候是不考虑模版基类的。所以找不到这个名字。如果加上this->a,那么这就是个dependant name,所以第一遍parse的时候不管它,到实例化的时候再查找。

2-phase name lookup的第2阶段的名字解析,只是进行dependant name 的查找和argument dependant lookup。

Visual C++和老版本的GCC并没有真正的实现2-phase name lookup,而是把模版类里所有的名字查找都留到实例化的时候进行,所以才会接受那样的代码。Clang和新版的GCC是严格执行2-phase name lookup 的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值