我有一個類,它有一個構造函數,它需要一個const char*
。它是:明確初始化的效率
c::c(const char* str) {
a = 32;
f = 0;
data = new char[strlen(str)];
memcpy(data, str, strlen(str));
}
而且一個函數,它接受其中的一個:
int foo(c& cinst);
您可以通過它傳遞一個c
的實例調用這個函數:
c cinst("asdf");
foo(cinst);
,或者因爲我們有明確的初始化,你可以這樣做:
foo("asdf");
這將通過構造函數「asdf」創建一個c
,然後將生成的對象傳遞給foo
。
但是,這看起來可能會比僅僅將foo
重載爲const char*
效率低很多。是否值得爲速度做過載或者性能影響如此之小以至於浪費空間來實現超載?我試圖儘可能快地完成我的程序,所以速度是一個重要因素,尺寸也是如此,但不是那麼重要。
您不復制很可能是錯誤的'\ 0'終止符。此外,你調用'strlen'兩次,這違背了你儘可能快的目標;)我建議如下:'data = new char [strlen(str)+ 1]; strcpy(data,str);'。 – fredoverflow 2010-08-24 17:00:12
你有沒有聽說過畫家施萊米爾? Google for it :)之後,看看你對'strlen'的調用 – 2010-08-24 17:02:40
@Mac:兩次調用'strlen'並不像調用n次那樣糟糕;) – fredoverflow 2010-08-24 17:04:08