我在这里问了一个问题:涉及非功能代码的initializer_list返回的生命周期扩展:
const auto foo = [](const auto& a, const auto& b, const auto& c) { return {a, b, c}; };
Run Code Online (Sandbox Code Playgroud)
我相信lambda试图回归intializer_list(这很糟糕,不要这样做.)但我得到了一个评论:
它不是一个
initializer_list,它是一个初始化列表.两件不同的事情.
我只是认为,无论何时你做了一个花括号列表,你都在创建一个intializer_list.如果那不是正在发生的事情,花括号中的列表是什么?
c++ initialization initializer curly-braces initializer-list
我怎样才能做到平等:
#include <vector>
size_t bufferSize = 1024 * 1024;
std::vector<unsigned char> buffer(bufferSize, ' ');
Run Code Online (Sandbox Code Playgroud)
使用列表(花括号)初始化?
当我尝试执行以下操作时:
#include <vector>
size_t bufferSize = 1024 * 1024;
std::vector<unsigned char> buffer {bufferSize, ' '};
Run Code Online (Sandbox Code Playgroud)
它错误地解释bufferSize为要存储在容器的第一个索引中的值(即调用错误的std::vector构造函数),并且由于从unsigned int(size_t)到()的转换无效而无法编译unsigned char.