0

私の C++ に関する知識は限られているので、お役に立てれば幸いです :)

私はこのような再帰的な方法を持っています:

std::string content;
std::string pathDir;

void Recurcive(std::string &url)
{

    content = getContent(url);
    url = findOneUrl(content);
    pathDir = getPathDir(url);
    //etc..

    Recurcive(url);

}

メソッド コードで使用される引数を適切に最適化するためのベスト プラクティスは何ですか? コンテンツ、newUrl、pathDir にポインターを使用する必要がありますか? そして、ポインターの有無の違いは何ですか?

4

2 に答える 2

1

引数を渡すには、値ポインタ、および参照の3つの方法があります。

値による:引数の新しいコピーが作成されます。このような大きなオブジェクトの場合std::string、高価になる可能性があります。のような小さなものについてはint、それは問題ではありません。

void myFunc(std::string str) { ... }
std::string mySuperLongString = getSuperLongString()
myFunc(mySuperLongString) // will make a copy of the long string. Expensive.

ポインタを使用する場合:ポインタを渡すときは、データのアドレスを渡すだけです。実際には、ポインタは値によって渡されますが、アドレスを渡すだけなので、簡単な操作です。

void myFunc(std::string *str) { ... }
std::string mySuperLongString = getSuperLongString()
myFunc(&mySuperLongString) // Pass the address of the string. Light operation

参照あり:いくつかの追加の安全性チェックがあることを除いて、ポインターの使用と非常に似ています。たとえば、参照を一度割り当てた後で再割り当てすることはできません。また、参照を、作業しているものの単なる別の名前として扱うことができます(つまり、間接参照演算子を使用する必要はなく*->ポインターのように) 。参照の使用は、ポインターの使用と同じくらい軽量ですが、より安全です。これは、引数C++を渡すための推奨される方法です。

void myFunc(std::string& str) { ... }
std::string mySuperLongString = getSuperLongString()
myFunc(mySuperLongString) // Pass a reference to the string. Light operation
于 2012-10-26T16:11:42.927 に答える
-5

ここでの最初のポイントは、以下のように std 名前空間を含めることです。

using namespace std;

この後、std::string の代わりに文字列を直接使用できます。パラメーター/引数を関数に渡しているときに質問に来ます。パラメーターのコピーが行われないため、参照変数を使用すると、結果として高速になり、参照が行われます。ポインタよりも安全

于 2012-10-26T16:07:22.097 に答える