代码之家  ›  专栏  ›  技术社区  ›  atomice

在方法声明中使用Type是否合法,但在方法定义中使用规范类型?

  •  3
  • atomice  · 技术社区  · 16 年前

    GNU C++(G+ +学究式墙)接受:

    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 回复  |  直到 16 年前
        1
  •  10
  •   Khaled Alshaya    16 年前

    是的,这是合法的:

    7.1.3 typedef说明符

    用typedef声明的名称 说明符变为typedef名称。 在其声明范围内,a 名称是 句法上 相等的 到关键字并命名 与中的标识符关联的类型 第8条所述的方式。一 typedef名称因此是 另一种类型。 typedef名称不 以课堂的方式介绍一种新的类型 声明(9.1)或枚举声明 做。

        2
  •  7
  •   Kristoffon    16 年前

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

        3
  •  1
  •   Malte Clasen    16 年前

    是的,这是合法的。

    这是有问题的,因为声明和定义如何匹配已经不明显了,但是如果你有一个很好的理由,你可以这样做。