警告:関数の戻り値の型では型修飾子は無視されます[-Wignored-qualifiers]

2020-02-14 c++ compilation

GCCコンパイラを使用して以下のコードをコンパイルしようとしています

class Class
{
public:

uInt16    temp;
const uInt32 function() const;

}

inline const uInt32 class::function() const
{
   return temp;
}

そして、私は次のコンパイラ警告を受け取っています

警告:関数の戻り値の型では型修飾子は無視されます[-Wignored-qualifiers]

この警告を修正する方法はありますか?

Answers

単純に使用する:

uInt32 function() const;

constのプリミティブ型を返すことはあなたが行うことができないとして、無用であるc.function()++さえなしconst

返されるconstオブジェクトは、プリミティブを模倣し、上記と同様のコードを禁止するために使用されました。 しかし今(C ++ 11以降)、必要に応じてそれをきれいに禁止することができます:

struct S
{
    S& operator ++() &;
    S& operator ++() && = delete;
};

S f(); // Sufficient, no need of const S f() which forbids move

戻り型のconst型修飾子は効果がありません。実際、 functiontempコピーを返します。この値をconstにする必要があるかどうかを決定するのは呼び出し側です。

const auto val = Class{}.function(); // here, val is const
auto val = Class{}.function(); // here val is not const

const型修飾子は、たとえば、クラスメンバーへの参照を返す場合に意味があります。比較する:

int f() { /* ... */ } // return int
const int& f() { /* ... */ } // return const reference to an int

Related