使用 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 个字节)。