使用 auto 关键字初始化 char 数组
Initializing char array using auto keyword
我一直在测试 auto 关键字,发现了一些对我来说很奇怪的事情。每个字母占用 1 个字节(char 类型),使用自动变量的自动说明符大小无论如何都是 4 个字节(我没有测试很长的字符串)。怎么解释呢?
char carray[] = "Some test output";
auto variable = "Some test output";
cout<<"carray: "<<sizeof(carray)<<endl;
cout<<"auto: "<<sizeof(variable);
由于数组到指针的衰减,variable
变成了 const char*
(大小为 4,这让我有些惊讶 - 你的平台是什么?)。
如果您希望 variable
保留为字符数组,您可以使用 decltype(auto)
,例如
decltype(auto) variable = "Some test output"; // sizeof(variable) is 17
auto variable = "Some test output";
这声明了一个指向字符的指针。大小将与机器字的大小相同(在 32 位机器上通常为 4 个字节,在 64 位机器上通常为 8 个字节)。
我一直在测试 auto 关键字,发现了一些对我来说很奇怪的事情。每个字母占用 1 个字节(char 类型),使用自动变量的自动说明符大小无论如何都是 4 个字节(我没有测试很长的字符串)。怎么解释呢?
char carray[] = "Some test output";
auto variable = "Some test output";
cout<<"carray: "<<sizeof(carray)<<endl;
cout<<"auto: "<<sizeof(variable);
由于数组到指针的衰减,variable
变成了 const char*
(大小为 4,这让我有些惊讶 - 你的平台是什么?)。
如果您希望 variable
保留为字符数组,您可以使用 decltype(auto)
,例如
decltype(auto) variable = "Some test output"; // sizeof(variable) is 17
auto variable = "Some test output";
这声明了一个指向字符的指针。大小将与机器字的大小相同(在 32 位机器上通常为 4 个字节,在 64 位机器上通常为 8 个字节)。