gpt4 book ai didi

c++ - 为什么我可以从 char * const 值创建一个 char * vector ?

转载 作者:搜寻专家 更新时间:2023-10-31 02:03:33 24 4
gpt4 key购买 nike

我不明白为什么 vc++ 和 g++ 让我从 char * const 值初始化一个 vector< char * >。

#include <iostream>
#include <vector>
using namespace std;

typedef char * str;
typedef char * const cstr;

int main(int argc, const cstr argv[])
{
const vector<str> arguments(argv + 1, argv + argc);
for (str arg : arguments)
{
cout << arg << endl;
}
return 0;
}

最佳答案

这是一个指向可变字符的指针:

typedef char * str; 

这是一个指向可变字符的常量指针。指针不能改变,但指向的字符可以修改:

typedef char * const cstr; 

有一种阅读指针和常量声明的简单方法:从右到左阅读:

T * const x; // x is a constant that points to an object of type T
T const * x; // x points to a constant object of type T.

这个 argv 是一个指向常量 cstr 的指针(一个衰减的数组)。最终,这是一个指向常量的指针(两个常量被视为一个)指向 char 的指针:

int main(int argc, const cstr argv[]

从指向 char 的常量指针集合构造一个 str vector (指向 char 的指针)。我们不关心指针本身是常量,因为代码没有修改指针,只是复制它们:

const vector<str> arguments(argv + 1, argv + argc)

这里没问题。


请注意,在类型左侧书写 const 通常称为“ west const”,或者有点讽刺地称为 const west。相比之下,将 const写在右边,通常被称为 east const。在语义上, east constwest const 是等价的。

问题中的 argv 使用了 west const 符号,因为 constcstr 的左边.如果你一直使用 east const,那么它看起来会是:

int main(int argc, cstr const argv[]

可以说,这种写法使 const 适用于变量 argv 而不是指向的值更清楚。

关于c++ - 为什么我可以从 char * const 值创建一个 char * vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55307712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com