c++ - 函数参数列表周围的双括号

标签 c++

我有以下代码,它使用 gcc 4.4 编译,没有警告,并返回 42。

template<typename T>
struct foo
{ };

template<typename T>
struct foo<void (T)>
{
  enum { value = 42 };
};

int main()
{
  return foo<void ((int))>::value;
}

现在,我明白了为什么当模板参数是 void (int) 时它应该起作用,但是双括号有什么用呢?这在 C++ 中合法吗?它与 void (int) 相同吗?

干杯

最佳答案

在这种情况下,void ((int))void (int) 相同.
void ((int))参与foo<void ((int))>叫做type-id .
根据 §8.1/1,type-id由...组成 type-specifier-seqabstract-declarator .
void ((int)) , type-specifier-seqvoidabstract-declarator((int)) , 和 abstract-declarator可以任意括号。
这在 C 和 C++ 中是合法的。

关于c++ - 函数参数列表周围的双括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5750396/

相关文章:

c++ - 当成员可能在迭代过程中被删除时,如何遍历集合?

c++ - 无法调试共享库 - 符号未正确加载

c++ - 从同一类的专用模板的静态函数访问类模板成员

c++ - make_shared如何为manager object和managed object分配单个动态内存

c++ - 按引用数组值交换

c++ - 测量线上数据点的变化; catch 浸

c++ - 将指针分配给特定内存地址并更改其值后出现段错误

c++ - 正确删除嵌套类对象?

c# - I/O 操作的 .NET 基于事件的异步模式是否会阻塞底层线程?

c++ - 为什么 'unspecified_bool' 对于对其包装类型具有内部转换的类失败?