Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VisualStudio中std::vector大小的初始化_C++_Visual Studio_Vector_Initialization_Size - Fatal编程技术网

C++ VisualStudio中std::vector大小的初始化

C++ VisualStudio中std::vector大小的初始化,c++,visual-studio,vector,initialization,size,C++,Visual Studio,Vector,Initialization,Size,为什么我不能在VisualStudio中初始化std::vector size 包括 包括 include Lexer.h//TokenRule定义 向量标记规则3={ {TokenType::Identifier,regex[a-zA-Z_][a-zA-Z0-9_]*}, {TokenType::Number,正则表达式[+-]?[0-9]+\\.[0-9]+?e[+-]?[0-9]+?}, {TokenType::String,regex\\\?:?=\\\\\?\\1.*\\\} }; I

为什么我不能在VisualStudio中初始化std::vector size

包括 包括 include Lexer.h//TokenRule定义 向量标记规则3={ {TokenType::Identifier,regex[a-zA-Z_][a-zA-Z0-9_]*}, {TokenType::Number,正则表达式[+-]?[0-9]+\\.[0-9]+?e[+-]?[0-9]+?}, {TokenType::String,regex\\\?:?=\\\\\?\\1.*\\\} }; IntelliSense类型检查:

std::vector<TokenRule *> tokenRules(3) = {
                                   ^^^^

任何对象只能有一个初始化-您可以

std::vector<TokenRule *> tokenRules(3);
这将调用vectorinitializer\u list\u Ilist-完全不同的构造函数。后者是您想要的,因为在您的情况下,它将使用初始值设定项_list的大小来确定所需的向量大小3

请注意,vector tokenRules=XXX对于vector tokenRulesXXX来说几乎是一种语法糖,您不能执行tokenRules=3的唯一原因是std::vector明确禁止它。所以在某种程度上,你可以说你的代码相当于

std::vector<TokenRule *> tokenRules(3){/*initializer list here*/};
具有1个对象的2个初始值设定项。希望这能使错误的来源更清楚一些

你也可以这样做

std::vector<TokenRule *> tokenRules(3);
tokenRules = {/*initializer list*/};

尽管这有点多余,而且容易出错,但实际的性能损失应该接近0。

编译器会怎么说?我可以同时初始化大小和值吗?这取决于要用什么值初始化向量。它们都是相同的值吗?如果是这样,vector有一个用于该目的的双参数构造函数count和value。还是价值观不同?如果是这样,那么使用C++11及更高版本的大括号初始化,或者使用数组或其他容器中的一对迭代器。
std::vector<TokenRule *> tokenRules(3);
tokenRules = {/*initializer list*/};