C++ 为什么我可以从char*const值创建char*向量?
我不明白为什么vc++和g++让我从char*const值初始化一个向量C++ 为什么我可以从char*const值创建char*向量?,c++,string,pointers,C++,String,Pointers,我不明白为什么vc++和g++让我从char*const值初始化一个向量 #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(arg
#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;
}
#包括
#包括
使用名称空间std;
typedef char*str;
类型定义字符*常量cstr;
int main(int argc,常数cstr argv[])
{
常量向量参数(argv+1,argv+argc);
for(str arg:参数)
{
cout这是指向可变字符的指针:
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(指向char的指针)的向量。我们不关心指针本身是否为常量,因为代码不修改指针,只复制它们:
const vector<str> arguments(argv + 1, argv + argc)
可以说,这种书写方式更清楚地表明const应用于变量argv
,而不是指向的值。问题到底是什么?你能提供更多的上下文吗?你做了什么?它做了什么?你的期望是什么?@Ayxan OP不期望代码编译,至少不是没有警告。你可能会把const char*
和char*const
混淆起来。愚蠢的,有点不相关的问题:为什么不直接使用std::string
?你可能想谈谈西康斯特和东康斯特const@Yakk-我想了想,但这整个东进主题听起来是基于观点的,这是反对政治的无论发生什么情况,一致性都会被破坏。例如:不,我的意思是解释西常量是如何导致OP与类型定义混淆的。@Yakk AdamNevraumont实际上,问题中的类型定义cstr是东常量。另一方面,argv是西常量。我将试着写一些关于它的内容。@Yakk AdamNevraumont我已经添加了关于东常量的文本/西康斯特
int main(int argc, cstr const argv[]