构造函数名称前的关键字结构

时间:2013-07-19 12:23:34

标签: c++ visual-c++

当我看到使用MS Visual C ++编译此代码成功时,我感到很惊讶。

struct foo {
    struct foo(int i): value(i) {}
    int value;
};

在如此奇怪的背景下,关键字struct的含义是什么?

1 个答案:

答案 0 :(得分:10)

在大多数情况下,您可以使用详细类型说明符 struct foo或等效class foo,而不仅仅使用类名foo。这有助于解决歧义:

struct foo {};  // Declares a type
foo foo;        // Declares a variable with the same name

foo bar;        // Error: "foo" refers to the variable
struct foo bar; // OK: "foo" explicitly refers to the class type

但是,在声明构造函数时不能使用此表单,因此您的编译器接受该代码是错误的。构造函数声明的规范(在C ++ 11 12.1 / 1中)只允许类名本身,而不是详细的类型说明符。

一般来说,当Visual C ++编译各种不稳定的代码时,你不应该感到惊讶。它因语言的非标准扩展而臭名昭着。