警告:関数の戻り値型で型修飾子が無視されました[-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 Objectは、プリミティブを模倣し、上記と同様のコードを禁止するために使用されました。 しかし、現在(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