2

virtual用 GCC 标记方法的未使用参数参数__attribute__((unused))和将参数强制转换为之间是否有任何功能差异(void)

class Other {
    virtual int sum(int a, int b, int c);
};

class Example : Other {
    virtual int sum(int a, int b, int c __attribute__((unused))) override {
        return a + b;
    }
};

class Example2 : Other {
    virtual int sum(int a, int b, int c) override {
        (void)c;
        return a + b;
    }
};

两者都可以消除未使用的参数警告,如果以后使用该变量,它们都不会发出警告。虽然 GCC__attribute__更长。

4

1 回答 1

3

没有功能差异,因为两者都可能导致无操作。(void)铸造具有优势,因为它适用于所有平台。

另一种方法是使用宏来使此类参数静音。因此,当您禁用宏时,您将知道代码中所有未使用的参数。

#define UNUSED(X) (void)X 

但是在这种特定情况下,我宁愿简单地不提及未使用的参数。它向代码的未来读者保证,未提及的参数保证不会被使用。

int sum(int a, int b, int /*c*/) override {  // comment is optional
  return a + b;
}
于 2019-11-21T03:17:37.427 回答