размер переменной после автоматической инициализации
#include <iostream>
#include <math.h>
using namespace std;
int main() {
int i{100};
float f{3.14};
double d{3.14159};
cout<<"size of int is: " <<sizeof(i)<<endl;
cout<<"size of float is: " <<sizeof(f)<<endl;
cout<<"size of double is: "<<sizeof(d)<<endl<<endl;;
auto x = sin(3.14159);
cout<<"size of auto that is double is: "<<sizeof(x)<<endl<<endl;
auto y{sin(3.14159)};
cout<<"size of auto that is double is: "<<sizeof(y)<<endl;
return 0;
}
Вывод:
Размер int: 4
Размер поплавка: 4
Размер двойника: 8
Размер автомобиля, который является двойным, равен: 8
Размер автомобиля, который является двойным, равен: 16
Почему sizeof(y)
16?
1 ответ:
Используя "typeid" с gcc 4.8.4 следующим образом:
#include <iostream> #include <math.h> #include <typeinfo> using namespace std; int main() { int i{100}; float f{3.14}; double d{3.14159}; cout<<"size of int is: " <<sizeof(i)<<endl; cout<<"size of float is: " <<sizeof(f)<<endl; cout<<"size of double is: "<<sizeof(d)<<endl<<endl;; auto x = sin(3.14159); cout<<"size of auto that is double is: "<<sizeof(x)<<endl<<endl; auto y{sin(3.14159)}; cout<<"size of auto that is double is: "<<sizeof(y)<<endl; cout << typeid(y).name() << endl; return 0; }
Я получаю следующий результат:
$ ./main size of int is: 4 size of float is: 4 size of double is: 8 size of auto that is double is: 8 size of auto that is double is: 16 St16initializer_listIdE
Я думаю ,что "auto y" на самом деле не присваивается дважды, но один из них: http://en.cppreference.com/w/cpp/utility/initializer_list
В нем говорится: "объект типа std:: initializer_list-это легкий прокси-объект, который обеспечивает доступ к массиву объектов типа const T."
Таким образом, скорее всего, дополнительное пространство используется для хранения указателя и размера вектора, или что-то вроде этого.