この質問がすでに回答されている場合はお詫びします-私は検索しましたが、参照を渡す際のより一般的な質問の数が非常に多いため、検索用語を見つけるのは困難です。
私が抱えている問題は、この種のものをコンパイルすると、レベル4の警告が表示されることです。
class MyClass
{
public:
MyClass() {};
};
void DoSomethingToMyClass(MyClass& my_class_reference);
void MyRoutine()
{
DoSomethingToMyClass(MyClass());
};
警告(C4239)は、基本的に、インスタンスから参照への危険なキャストがあることを示しています。レベル4の警告を書き留めないように注意深く調べたところ、多くの人が-1をsize_t(size_t(-1)を知るためのボーナスポイント)として返すなど、私の(および他の人の)コードのバグを特定したためです。実際には)。
上記のコードが実際に何をするのか誰かが私に説明できますか?私の最も偏執的な理論は次のとおりです。
- MyClass()のインスタンスはオンザフライで作成されますが、適切なハンドルが与えられていません。
- my_class_reference参照で実行された操作は、失火します。
もう1つの極端な点は、C4239は常に無視できるということです...
* [類似の状況は、誰かが参照をデフォルトにした場合です。
void DoSomethingToMyClass(MyClass& my_class_reference=MyClass());
これは同じ警告を生成しますが、別のトピックで部分的にカバーされています。] *
編集:
迅速な対応に感謝します。申し訳ありませんが、VisualStudioのVC++について言及する必要があります。