Предположим, у меня есть класс, подобный
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
. Кроме того, я надеюсь, что компилятор оптимизирует другие ветви внутри конструктора. Если кто-нибудь знает, правда ли это или как проверить, это будет с благодарностью. Я также предположил, что добавление шаблонов в ситуацию не меняет проблему «пустого класса» сверху, это верно?