Если вы хотите, чтобы также вызывал функцию в другой части вашего кода и не передавался как функтор, предпочтите форму функции. Например, вы бы предпочли:
if (val_lt(a,b))
{
//...
}
до
if(val_lessthan()(a,b))
{
// ...
}
В противном случае при выборе формы функтора лучше вызывать с неназванным объектом функтора. То есть:
std::sort(wordvector.begin(), wordvector.end(), val_lesstthan());
вместо:
val_lesstthan named;
std::sort(wordvector.begin(), wordvector.end(), named);
Отмена именования параметров и возвращаемых значений позволяет компилятору выполнять оптимизацию. Это относится к глобальной концепции, известной как RVO (оптимизация возвращаемого значения). В этом случае он, вероятно, освободит ваш код от создания одной копии.