我不明白为什么 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;
有一种简单的方法来读取指针和 const 声明:从右到左读取:
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(指向 char 的指针) vector 。我们不关心指针本身是常量,因为代码不会修改指针,只是复制它们:
const vector<str> arguments(argv + 1, argv + argc)
这里没问题。
请注意,在类型左侧写入
const
通常称为“west const”,或者讽刺地称为 const west
。相反,在右侧写const
通常称为east const
。从语义上讲,east const
和 west const 是等效的。
问题中的 argv
使用 west const 表示法,因为 const
位于 cstr
的左侧。如果你一直使用 east const
,那么它看起来会是:
int main(int argc, cstr const argv[]
可以说,这种编写方式更清楚地表明 const 适用于变量 argv
,而不是指向的值。
关于c++ - 为什么我可以从 char * const 值创建 char * vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55307712/