在C++ 11标准的6.8.3中说:



由于该要求而导致格式不正确的程序示例是什么?

最佳答案

#include <iostream>
#include <typeinfo>

typedef const int cint;

template <int a> struct x
{
  static cint b = 0;
};

template <> struct x<42>
{
  typedef cint b;
};

cint w = 17;

int main ()
{
  cint (w)(42), (z)(x<w>::b);

  std::cout << typeid(z).name() << std::endl;
}

需要消除main()中的第一个声明的歧义,因此将执行试验解析。在此解析期间,本地w是未知的,因为该解析纯粹是语法上的(仅解析内容,不执行语义操作)。因此,w是一个全局常量,其值为17,x<w>::b是一个值,z是一个变量。

在实际解析期间,发生语义 Action 。因此,名称w绑定(bind)到新声明的局部常量,其值为42,x<w>::b成为类型,而z是函数声明。

关于c++ - C++ 11模板参数错误绑定(bind)的示例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15941964/

10-12 13:38