这是 C++11 发起器的新语法吗?
Is this a new syntax of C++11 initalizer?
MySQLRouter::MySQLRouter(const int argc, char **argv)
: MySQLRouter(Path(argv[0]).dirname(),
vector<string>({argv + 1, argv + argc}))
{
}
"vector({argv + 1, argv + argc})"是什么意思?
附言对不起这个简单的问题。我真的不知道语法名称,所以我无法谷歌搜索它。
vector<string>({argv + 1, argv + argc})
从参数构造vector<string>
{argv + 1, argv + argc}
,并使用该参数使用 Move 构造函数构造第二个vector<string>
。第二个对象传递给 MySQLRouter
的第二个构造函数。
您也可以使用更简单的形式:
vector<string>{argv + 1, argv + argc}
或
vector<string>(argv + 1, argv + argc)
这将仅构造一个临时对象。
话虽如此,使用
vector<string>({argv + 1, argv + argc})
不会因使用 Move 构造函数而导致任何性能损失。
下面是演示上述行为的简单测试程序:
#include <iostream>
#include <vector>
#include <string>
void test(std::vector<std::string> const& v)
{
for ( auto const& item : v )
{
std::cout << item << std::endl;
}
std::cout << std::endl;
}
int main(int argc, char** argv)
{
test(std::vector<std::string>({argv+1, argv+argc}));
test(std::vector<std::string>(argv+1, argv+argc));
test(std::vector<std::string>{argv+1, argv+argc});
}
当程序运行时:
./socc aa bb cc
我得到以下输出:
aa
bb
cc
aa
bb
cc
aa
bb
cc
相关文章:
- 如何使用新语法QT5将信号连接到信号?
- 将数据复制到磁盘上新位置的语法
- 使用新的c++返回值语法的Const方法
- 为什么旧的空抛规范被用新的语法"noexcept"重写?
- Qt的新信号/时隙语法问题 - 连接到一个简单的函数
- QT和新的信号槽语法,QApplication::退出主功能外的插槽
- 使用具有新信号槽语法的Qt插件系统在接口类中声明信号
- 新的智能指针语法
- C ++有趣的语法,用于在std::cout中打印新行
- 将QMETAMETHOD作为参数传递到使用新的Qobject :: Connect语法的函数
- (C++)用于实例化新对象并将其分配给指向相同对象类型的指针的 2D 向量的语法
- 使用新的 C++11 语法的 auto 进行函数声明,但使用 auto&并且没有 ->
- 模板类中新结构的C++语法
- 全局新运算符调用语法
- 声明函数模板的5种新语法是什么
- 这是 C++11 发起器的新语法吗?
- 运算符指针数组的新语法
- c++新语法,请解释一下
- 这两种新语法有什么区别?
- 如何使用新语法