为什么我不能在Visual Studio中初始化<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.js"></script>
<div class="stuff">
<p>This is stuff</p>
<p>This is other stuff</p>
<p>A <a href="#" class="finished">link</a> is in here.</p>
</div>
<div id="blocker"></div>
大小?
std::vector
IntelliSense类型检查:
#include <vector>
#include <regex>
#include "Lexer.h" // TokenRule definition
vector<TokenRule> tokenRules(3) = {
{ TokenType::Identifier, regex("[a-zA-Z_][a-zA-Z0-9_]*") },
{ TokenType::Number, regex("[+-]?[0-9]+(\\.[0-9]+)?(e[+-]?[0-9]+)?") },
{ TokenType::String, regex("\\\"(?:(?=(\\\\?))\\1.)*?\\\"") }
};
答案 0 :(得分:2)
任何对象只能进行一次初始化 - 您可以执行
std::vector<TokenRule *> tokenRules(3);
将调用构造函数,声明为vector(size_type _Count)
,创建一个包含3个默认初始化元素的向量,或者
vector<TokenRule> tokenRules{
{ TokenType::Identifier, regex("[a-zA-Z_][a-zA-Z0-9_]*") },
{ TokenType::Number, regex("[+-]?[0-9]+(\\.[0-9]+)?(e[+-]?[0-9]+)?") },
{ TokenType::String, regex("\\\"(?:(?=(\\\\?))\\1.)*?\\\"") } };
会调用vector(initializer_list<value_type> _Ilist)
- 完全不同的构造函数。后者是你想要的,因为它将使用initializer_list
的大小来确定所需的矢量大小(在你的情况下为3)。
请注意,vector<TokenRule*> tokenRules = XXX
对vector<TokenRule*> tokenRules(XXX)
来说几乎是语法糖,而tokenRules = 3
无法做到的唯一原因是std::vector
明确禁止它。所以在某种程度上你可以说你的代码相当于
std::vector<TokenRule *> tokenRules(3){/*initializer list here*/};
为1个对象提供2个初始值设定项。希望这会使错误的来源更加清晰。
您也可以
std::vector<TokenRule *> tokenRules(3);
tokenRules = {/*initializer list*/};
虽然这有点多余(并且容易出错),但实际性能损失应该接近0。