是否有一对非等价的类型分别包含`int const`和`const int`?

时间:2012-01-15 22:43:38

标签: c++ types

众所周知,int constconst int是“类型同义词”。

我之前告诉过某人,如果这是整个类型,它们是等效的(即如果typename中没有更多的令牌)。

但是,现在我考虑一下,是否有一对词法分别包含int constconst int,它们 等效?

4 个答案:

答案 0 :(得分:2)

不,我不这么认为,除非你添加一些其他限定符:

const int x;
volatile const int x;

可是:

volatile const int x;
volatile int const x;
const volatile int x;
const int volatile x;
int const volatile x;
int volatile const x;

都是等同的,但并非都是同样合理的。

答案 1 :(得分:1)

xy在技术上是两种截然不同的类型,因为int在位字段(int!= signed int中具有特殊含义它们)。

struct bitfield {
  const int x : 1;
};
int const y = 0;

并非完全相关,但仍然很有趣。

答案 2 :(得分:1)

声明说明符的顺序无关紧要。这是合法的C ++ 11:

static long const unsigned inline long volatile int f() { return 0; }

答案 3 :(得分:0)

没有。两种表单可以出现的上下文是type-id。没有上下文,其中两个type-id可以在没有分隔符的情况下顺序出现(通常为,;)。因此,const始终与type-id相同int