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

ato*_*ice 3 c++ standards typedef g++ 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Ara*_*raK 10

是的,它是合法的:

7.1.3 typedef说明符

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


Kri*_*fon 7

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