3

GNU C++ (g++ -pedantic -Wall) 接受这个:

typedef int MyInt;

class Test
{
public:
    MyInt foo();
    void bar(MyInt baz);
}; 

int Test::foo()
{
    return 10;
}

void Test::bar(int baz)
{
}

int main(void)
{
    Test t;
    t.bar(t.foo());
    return 0;
}

它是合法的 C++ 吗?其他编译器可能会接受它吗?

4

3 回答 3

10

是的,这是合法的:

7.1.3 typedef 说明符

使用 typedef 说明符声明的名称成为 typedef-name。在其声明的范围内,typedef-name 在语法上 等同于关键字,并以第 8 节中描述的方式命名与标识符关联的类型。因此 typedef-name 是另一种类型的同义词。typedef-name 不会像类 声明 (9.1) 或枚举声明那样引入新类型

于 2009-08-25T15:58:42.587 回答
7

不管它是否合法,这都不是最佳做法。Typedef 存在,因此您可以更改基本类型并将其反映在您的代码中,如果您这样做,您会突然发现您的程序不再编译。

于 2009-08-25T15:56:32.870 回答
1

是的,这是合法的。

这是值得怀疑的,因为声明和定义如何匹配已经不明显了,但如果你有充分的理由,你可以做到。

于 2009-08-25T15:59:22.507 回答