プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

C言語では、const の関数というのを認めているようですが、どうも使い方が分かりません。

const int foo()
{

 これは通常のint foo()とどのように違うのでしょうか。
 よろしくお願いいたします。

A 回答 (3件)

constな値を返す関数で、唯一、意味があるのは



const char *DayOfWeek(int Day)
{
switch (Day)
{
case SUNDAY:
return "Sunday";
case MONDAY:
return "Monday";
(以下略)

のような「(静的メモリにある)固定の値を返す関数」のみ。

返されたポインタは「constな文字列」なので、返り値はconst char *になります。

この他「構造体のポインタを返すが、ユーザーが、その構造体を書き替えてはいけない場合」にも、関数を「const struct タグ名 *を返す」として定義します。

例えば、システムのプロパティを返す関数とかでは、返されたポインタの構造体を書き変えてもシステムのプロパティが変更される訳じゃないから、返されたポインタの中身を書き変え出来ないよう、constな構造体のポインタを返す、と宣言したりします。

>これは通常のint foo()とどのように違うのでしょうか。
何も違いません。同じです。

1つだけはっきりしてるのは「ポインタを返す関数に付けないと、constは意味が無い」と言う事です。
    • good
    • 1
この回答へのお礼

ご丁寧なご説明、ありがとうございました。
非常に良く解りました。

お礼日時:2008/12/24 12:02

「なにも違わない」はず.


ちなみにそれは「const な値を返す」とは言わない>#2. 「返している値」そのものは const になっていない.
    • good
    • 1
この回答へのお礼

なるほど。つまり、静的な値を返すときだけではなく、constで宣言された変数のポインタを返すときなどもこのようにするということでしょうか。
ありがとうございました。

お礼日時:2008/12/24 12:04

ほとんどの場合無意味で無効果

    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
すっきりしました。

お礼日時:2008/12/24 12:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!