[英]Returning strings from functions in C++
我有一個 function:
BOOL ReadWebPage(CONST TCHAR *sURL, TCHAR *sDataRead)
{
BOOL rv = FALSE
TCHAR *sFile = new TCHAR[1024]();
StringCchCopy(sFile, 1024, L"c:\\temp\\file.txt");
res = URLDownloadToFileW(NULL, sURL, sFile, 0, NULL);
if (res != S_OK)
StringCchCopy(sDataRead, 16, L"Error");
else {
StringCchCopy(sDataRead, 16, L"File exists on remote server");
rv = TRUE; }
delete[] sFile;
return rv;
}
如果它是*sDataRead
,那么調用行會像這樣調用這個 function :
ReadWebPage(L"http://www.example.com/test.txt", sTest);
如果它是**sDataRead
,那么調用行會像這樣調用這個 function :
ReadWebPage(L"https://www.example.com/test.txt", &sTest);
我的問題是,我應該在 function 中為ReadWebPage
原樣聲明*sDataRead
,還是將其聲明為**sDataRead
更有效,還是沒有任何區別?
根據評論,我想我可以非常果斷地回答這個問題:這個 function 的寫法如此糟糕,以至於您假設從更改簽名中獲得的任何收益都完全無關緊要。
此外,提議的更改(從TCHAR*
到TCHAR**
)是語義上的。 當然,它還涉及一種間接方式,但最重要的是,它允許您修改指針值,如果您只是填充預分配的緩沖區,這根本不是您需要或想要的。
此外,如果目標是填充預分配的緩沖區,則排除 function 本身的分配。 事實上,一旦你完成了分配,你可以很容易地直接返回sFile
,避免復制。
如果這可行(例如,因為無論如何您在此調用之前分配了緩沖區),那么合理的結論是放棄輸出參數並簡單地返回結果。
事實上,如果你使用標准容器,你也可以吃蛋糕; 通過自定義用於返回容器的分配器,您可以使其使用所需的 memory 而無需使用外參數破解。 不過,對於這個答案,該解決方案有點偏離 scope 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.