Typedef阵列混乱

Typedef array confusion

本文关键字:混乱 阵列 Typedef      更新时间:2023-10-16

,因此我应该使用Typedef命令在数组中存储不同的车牌。我的朋友通过了他的代码,但我实际上并没有得到他的解释。这是他的代码:

#include <iostream>
using namespace std;
typedef char string[8]
...functions functions...
int main(){
   string license_plate[100]
...

我对这里发生的事情有点困惑。我知道Typedef是关于什么是关于的,但从未在数组中实际看到它。从我理解的

typedef char string[8]

表示每当我编写string[8]时,编译器就会变成char

但这对我来说没有意义,为什么我会键入[8]?所以我认为这是他离开并删除[8]的错误,并且没有错误。

所以我想问,是真的说,通过我的校正,string license_plate[100]不过是编译器眼睛的char license_plate[100]?如果是这样,为什么我可以在键入char license_plate[100]时使用所有这些?

typedef char string[8]

这条代码是一个可怕的想法。它告诉编译器将名称 string视为 char[8]

最可怕的是,您无可救药地感到困惑,代码的未来读者和编译器本身,因为已经有标准的std::string类。

示例:

#include <string>
#include <iostream>
int main()
{
    typedef char string[8]; // terrible idea
    // ...
    string x("abc");
    std::cout << x.size() << 'n'; // error
    std::cout << (x + "def") << 'n'; // error
    std::getline(std::cin, x); // error
}

您使用了using namespace std;,使这种混乱变得更加可怕。不要使用它。帮自己一个忙,只用std::准备一切。

关于您的typedef的另一个可怕的方面是,几乎没有一个可以想象的理由来理解您要将一系列八个char大小的数字视为源代码称为string的东西。

至少被称为char_arr8;在这种情况下,typedef名称(也许)会使代码更可读而不是引起混乱。

int main(){
   string license_plate[100]

此代码建议您真正想做的。您需要一个字符串的容器,并将容器称为"许可证"。没关系。只需使用std::vectorstd::string在C 中表达它。

#include <string>
#include <vector>
int main() {
    std::vector<std::string> license_plates;
    // ...
}

如果您绝对确定容器始终将完全容纳100个元素,则可以使用数组:

#include <string>
int main() {
    std::string license_plates[100];
    // ...
}

std::array

#include <string>
#include <array>
int main() {
    std::array<std::string, 100> license_plates;
    // ...
}

您定义了char[8]的类型 - alias。因此,当您做例如。

string license_place[100];

它等效于

char license_place[100][8];