私はいくつかの奇妙なコードを見つけました...デフォルトのパラメータ値がコールサイトで表示されないコードで定義されている場合はどうなりますか?
//in file ClassA.h:
class ClassA {
public:
void Enable(bool enable);
};
//in file ClassA.cpp
#include <ClassA.h>
void ClassA::Enable(bool enable = true)
{
//implementation is irrelevant
}
//in Consumer.cpp
#include <ClassA.h>
....
ClassA classA;
classA.Enable(true);
明らかに、Consumer.cpp
はClassA.h
のみでClassA.cpp
は含まれていないので、コンパイラはパラメータにデフォルト値があることを見ることができません。
メソッド実装の署名におけるClassA::Enable
の宣言されたデフォルト値は、いつどのような効果を持ちますか?これは、メソッドがClassA.cpp
を含むファイル内から呼び出された場合にのみ発生しますか?
誰がこれをマークしたのですか?あなたが私に印をつけたら、どうして私は少なくともそれを修正できるのか教えてください。 –
実際には、これをマークしたのは私でした。その理由は、OPが明らかに、これを定義ではなく宣言に入れることが正しいことを知っているということでした。 OPは、そのようなことを定義することの効果は何か、あなたは完全に質問を読むことなく答えたのだろうと思っていました。そして、はい、それをマークする理由を知らせてくれて申し訳ありません。私はそれをしていたはずです。 – Aamir
OPはそれを宣言に入れることについて言及しなかったので、彼が言及した可視性の問題に対する解決策を提案した。 –