在方法声明中使用typedef但在方法定义中使用规范类型是合法的C ++吗?

时间:2009-08-25 15:53:20

标签: c++ g++ standards typedef standards-compliance

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 ++吗?其他编译器是否可能接受它?

3 个答案:

答案 0 :(得分:10)

是的,这是合法的:

  

7.1.3 typedef说明符

     

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

答案 1 :(得分:7)

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

答案 2 :(得分:1)

是的,这是合法的。

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