Сообщение Re: void foo(const char* & val) от 26.05.2021 14:45
Изменено 27.05.2021 5:55 rg45
Re: void foo(const char* & val)
Здравствуйте, Lepsik, Вы писали:
L>Как можно передать в функцию каст на tst без использования промежуточной переменной p?
На правах вредного совета: добавить перегрузку foo для rvalue reference:
Отработает именно так, как ты хочешь
L>Как можно передать в функцию каст на tst без использования промежуточной переменной p?
На правах вредного совета: добавить перегрузку foo для rvalue reference:
void foo(const char* & val)
{
char* r = new char[255];;
strncpy_s(r, 255, val, 255);
cout << r;
}
void foo(const char* && val)
{
foo(val);
}
int main()
{
char tst[255] = "TEST";
foo(tst);
}
Отработает именно так, как ты хочешь
Re: void foo(const char* & val)
Здравствуйте, Lepsik, Вы писали:
L>Как можно передать в функцию каст на tst без использования промежуточной переменной p?
На правах вредного совета: добавить перегрузку foo для rvalue reference:
Отработает именно так, как ты хочешь
P.S. Создания промежуточного указателя не избежать, поскольку ссылку на указатель можно привязать только к указателю, никак не к массиву. Разница лишь в том, что в твоем примере такой указатель (p) создается явно как локальная переменная, а в моем — неявно, как временный объект с одновременным созданием rvalue ссылки, с последующим преобразованием в lvalue выражение и привязке его к lvalue ссылки.
L>Как можно передать в функцию каст на tst без использования промежуточной переменной p?
На правах вредного совета: добавить перегрузку foo для rvalue reference:
void foo(const char* & val)
{
char* r = new char[255];;
strncpy_s(r, 255, val, 255);
cout << r;
}
void foo(const char* && val)
{
foo(val);
}
int main()
{
char tst[255] = "TEST";
foo(tst);
}
Отработает именно так, как ты хочешь
P.S. Создания промежуточного указателя не избежать, поскольку ссылку на указатель можно привязать только к указателю, никак не к массиву. Разница лишь в том, что в твоем примере такой указатель (p) создается явно как локальная переменная, а в моем — неявно, как временный объект с одновременным созданием rvalue ссылки, с последующим преобразованием в lvalue выражение и привязке его к lvalue ссылки.