У меня есть класс, который имеет конструктор, который принимает 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");
, который сделает c
, передав конструктор «asdf», а затем передаст результирующий объект foo
.
Однако, похоже, что это может быть немного менее эффективно, чем просто перегрузка foo
, чтобы взять const char*
. Стоит ли перегружать скорость или это влияние на производительность настолько мало, что это пустая трата пространства, чтобы сделать перегрузку? Я пытаюсь сделать свою программу как можно быстрее, поэтому скорость - важный фактор, так что размер, но не так много.
Вы не копируете терминатор '\ 0', что, скорее всего, является ошибкой.Кроме того, вы вызываете 'strlen' дважды, что противоречит вашей цели быть как можно быстрее;) Я предлагаю следующее:' data = new char [strlen (str) + 1]; strcpy (data, str); '. – fredoverflow
Вы когда-нибудь слышали о Шлемиеле Художнике? Google для этого :) После этого посмотрите на свои вызовы на 'strlen' –
@Mac: вызов' strlen' дважды не так уж плох, как вызов его n раз;) – fredoverflow