私はC ++で他の誰かのコードに取り組んでおり、特定の関数への奇妙な呼び出しを見つけましたfunc()
。次に例を示します。
if(condition)
func();
else
(*this).func();
違いは何であるfunc()
とは(*this).func()
?
呼び出し例は何ですかfunc()
とは(*this).func()
異なるコードを実行しますか?
私の場合、func()
マクロではありません。これは基本クラスの仮想関数であり、基本クラスと派生クラスの両方に実装があり、freeはありませんfunc()
。if
基底クラスのメソッドに配置されています。
実際には違いがありますが、非常に重要なコンテキストです。このコードを考えてみましょう:
void func ( )
{
std::cout << "Free function" << std::endl;
}
template <typename Derived>
struct test : Derived
{
void f ( )
{
func(); // 1
this->func(); // 2
}
};
struct derived
{
void func ( )
{
std::cout << "Method" << std::endl;
}
};
test<derived> t;
ここで、を呼び出すt.f()
と、最初の行でtest::f
free関数func
が呼び出され、2行目でが呼び出されますderived::func
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加