Предположим, у меня есть класс вроде
class Empty{
Empty(int a){ cout << a; }
}
И затем я вызываю его, используя
int main(){
Empty(2);
return 0;
}
Приведет ли это к тому, что в стеке будет выделена какая-либо память для создания «пустого» объекта? Очевидно, что аргументы необходимо поместить в стек, но я не хочу нести никаких дополнительных накладных расходов. В основном я использую конструктор как статический член.
Причина, по которой я хочу это сделать, - шаблоны. Фактический код выглядит как
template <int which>
class FuncName{
template <class T>
FuncName(const T &value){
if(which == 1){
// specific behavior
}else if(which == 2){
// other specific behavior
}
}
};
что позволяет мне писать что-то вроде
int main(){
int a = 1;
FuncName<1>(a);
}
так что я могу специализировать один параметр шаблона, не указывая при этом тип T
. Кроме того, я надеюсь, что компилятор оптимизирует другие ветки внутри конструктора. Если кто-нибудь знает, правда ли это или как это проверить, мы будем очень признательны. Я также предположил, что добавление шаблонов в ситуацию не меняет проблему "пустого класса" сверху, верно?