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 ++吗?其他编译器是否可能接受它?
答案 0 :(得分:10)
是的,这是合法的:
7.1.3 typedef说明符
使用typedef声明的名称 说明符成为typedef名称。 在其声明范围内,a typedef-name 语法 与关键字等效并命名 与标识符关联的类型 第8条所述的方式 因此typedef-name是其同义词 另一种类型。 typedef-name不 以类的方式引入新类型 声明(9.1)或枚举声明 的确实强>
答案 1 :(得分:7)
无论是否合法,这都不是最好的做法。存在Typedef,因此您可以更改基本类型并将其反映在您的代码中,如果您这样做,您将突然发现您的程序不再编译。
答案 2 :(得分:1)
是的,这是合法的。
这是值得怀疑的,因为声明和定义如何匹配并不明显,但如果你有充分的理由,你就可以做到。