聲明b
作爲
float* b = ...;
將工作同樣在這裏。 const
表示存儲在b
(即指向float
的數組的開頭)中的指針不能更改。
由於代碼不會試圖改變它(它會失敗,如果它嘗試),刪除const
將沒有什麼區別。
const
作爲一種安全機制。程序員要求編譯器「告訴我,如果我試圖用這個變量做一些愚蠢的事情」。作爲一般規則,默認情況下製作const
是一個好主意,除非您確實知道需要更改它們。這意味着你不會意外地分配給你不想要的東西,讓你可能很難追蹤到錯誤。
(也有可能是編譯器與const
更多的優化機會的理由。也許這是在某些情況下真實的,但它有點這裏無關緊要。安全是在這種情況下,主要關注的問題。)
但在這種情況下,無論如何,所有那些手動內存管理和使用指針的問題都會有問題,最好使用一個爲您完成所有工作的庫組件,比如std::vector
。
編輯:只是爲了完整性,下面是一個使用std::vector
版本:
std::vector<float> duplicate(float* f[], std::size_t n)
{
std::vector<float> copyOfF;
copyOfF.reserve(n); // save enough space; not essential
std::transform(f, // front of f
f+n, // back of f
std::back_inserter(copyOfF), // push them into the vector
[](float* f){return *f;}); // deref the pointers
return copyOfF; // will steal the internal array
}
通過使用[順時針/螺旋規則](http://c-faq.com/decl/spiral.anderson.html),變量'b'是一個指向'float'的常量指針,這意味着指針是恆定的,你不能改變它。 –
代碼無效,我認爲你的意思是'返回b;'。在這種情況下將'b'作爲'const'指針並沒有什麼區別,並且無論你是否這樣做,代碼都很糟糕。改爲使用'std :: vector'。 –
Praetorian
對不起,這是一個錯字。這是回報b; 。感謝您指出! – user3204065