Typedef阵列混乱
Typedef array confusion
,因此我应该使用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::vector
和std::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];
- OpenMP阵列性能较差
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 如何克服提升精神AST混乱
- 当我的阵列太大时出现分段错误
- 位阵列上的快速AND运算
- 阵列必须使用大括号封闭的初始器进行初始化
- 没有从阵列<float>到阵列<int>的可行转换
- C++动态安全 2D 交错阵列
- 将平面阵列重塑为复杂的特征类型
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 库特<<恩德尔;不适用于打印 2D 阵列
- 数组类 阵列的打印输出
- 从较小的阵列到较大的阵列的元素级转换
- 仅在大型阵列上出现合并排序分段错误
- 从阵列C++中删除重复项
- 阵列的大小在C++中是否灵活?
- 反转阵列中的正序列
- Typedef阵列混乱
- C++中的二维阵列构造混乱