std :: initializer_list是C ++ 11中的一种特殊类型,用于从相同类型的值列表构造容器和其他类型。可以实现为一对指针或指针和长度,其存储可以是自动,临时或静态只读。
是在C ++ 11中引入的类的非静态数据成员的内联初始化? c ++ 11,不允许使用Inline初始化器在类声明中直接初始化非静态数据成员。但是,现代编译器现在接受此类内联初始化器。 ...
#include <iostream> class A { int a = 10; // Inline initializer for non-static member static int sa; // Inline initializer for static member not allwed public: void print() { std::cout << this->a << std::endl; std::cout << this->sa << std::endl; } }; int A::sa=20; int main() { A x; x.print(); return 0; }
<brace-enclosed initializer list> 我正在编写我的自定义onitirotizer_list和pair。但是,我遇到了转换失败问题:
我不知道解决这个问题。 #include <iostream> #include <string> namespace test { template<class _E> class initializer_list { public: typedef _E value_type; typedef const _E& reference; typedef const _E& const_reference; typedef size_t size_type; typedef const _E* iterator; typedef const _E* const_iterator; private: iterator _M_array; size_type _M_len; // The compiler can call a private constructor. constexpr initializer_list(const_iterator __a, size_type __l) : _M_array(__a), _M_len(__l) {} public: constexpr initializer_list() noexcept : _M_array(0), _M_len(0) {} constexpr size_type size() const noexcept { return _M_len; } constexpr const_iterator begin() const noexcept { return _M_array; } constexpr const_iterator end() const noexcept { return begin() + size(); } }; template<class _Tp> constexpr const _Tp* begin(initializer_list<_Tp> __ils) noexcept { return __ils.begin(); } template<class _Tp> constexpr const _Tp* end(initializer_list<_Tp> __ils) noexcept { return __ils.end(); } template <typename p1, typename p2> class pair { public: p1 first; p2 second; pair(p1 f, p2 s) : first(f), second(s) {} void display() const { std::cout << "(" << first << ", " << second << ")" << std::endl; } // accept {...} assign pair(test::initializer_list<pair> il) { if (il.size() == 2) { auto it = il.begin(); first = it->first; second = (it + 1)->first; } } }; } // namespace test int main() { test::pair<std::string, std::string> mp = {test::pair<std::string, std::string>("a", "b"), test::pair<std::string, std::string>("c", "d")}; mp.display(); // exception: (a, c) return 0; }
error: could not convert ‘{test::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >(std::__cxx11::basic_string<char>(((const char*)"a"), std::allocator<char>()), std::__cxx11::basic_string<char>(((const char*)"b"), std::allocator<char>())), test::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >(std::__cxx11::basic_string<char>(((const char*)"c"), std::allocator<char>()), std::__cxx11::basic_string<char>(((const char*)"d"), std::allocator<char>()))}’ from ‘<brace-enclosed initializer list>’ to ‘test::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >’ 71 | std::string> mp = {test::pair<std::string, std::string>("a", "b"), test::pair<std::string, std::string>("c", "d")}; <brace-enclosed initializer list>
为什么不能从初始化列表中推导t && template参数? consons inst in函数: 模板
考虑函数: << i; } or any other function that expects one parameter with a begin()/end(...
考虑这个函数: 模板 无效 printme(T&& t) { 对于(自动我:t) std::cout << i; } or any other function that expects one parameter with a begin()/end(...
当 T 从 int 隐式转换时,为什么 std::vector<T> v{1, 2, 3} 和 std::vector<T> v = {1, 2, 3} 调用不同的构造函数?
问题 - 请参阅编译器资源管理器 如果我创建一个 std::vector 并以两种方式初始化它,都会调用 std::initializer_list 构造函数。 std::vector v1{1, 2, 3}; // 调用...
我想用不同的字段值来初始化某种类型(结构)的许多不同对象,并且我想使用名称进行初始化以使代码可读且健壮。 初始化器...
考虑代码: #包括 #包括 #包括 int main() { std::vector v{{"awe", "kjh"}}; // 不是 v{"awe", "kjh"} std::co...
如何使用initializer_list构造函数推导编译时矩阵类的二维?
#包括 #包括 模板 类矩阵 { 受保护: std::array,行>矩阵; 噗...
如果 C++11 中存在 `std::initializer_list` ctor,如何使用默认成员初始值设定项?
考虑以下代码: #包括 结构体A { A(整数,整数){ std::cout << "A::A(int, int)\n"; } A(std::initializer_list) { ...
在向量的 std::initializer_list 上调用 std::views::join 时出错
我想连接多个视图,而不使用临时变量(如示例中的 arr_and_zeroes )。但是,这样做会产生编译错误。 有没有什么方法可以不使用临时
由于某种原因,由于const字段_constFoo的初始化,编译器无法为该类生成operator=,我只是想知道为什么。使用VS2010。 类 Foo { 民众: ...
C++11标准是否保证initializer_list对象的内存布局是跨编译器兼容的?
vc++ 实现 std::initializer_list 如下: 模板 类初始值设定项列表 { 民众: // ... 私人的: const value_type* _first; const value_type* _last; }; 哈...
通过反复试验,我注意到某些 C++11 功能依赖于某种编译器魔法 (TM)。 我一直在努力实施我自己的标准
将不需要位于初始值设定项列表中的类成员变量放入初始值设定项列表中是否有任何好处?例子: 类 Foo { 民众: 富() {} }; 类酒吧 { 民众: 酒吧...
事实上,我正在尝试实现类似于 std::initializer_list 的东西,但具有自定义初始化规则。 假设我们有结构体 A 和结构体 B: 结构A { 字符a[16]; 整数b; 浮动 c;...
我编写了一个具有两个重载的函数 - 一个用于单个指针,一个用于指针向量。在代码中的某个时刻,我想将一个空向量传递给函数并使用 {} 作为参数...
我的问题与我的另一个问题紧密相连。我一直在努力初始化包含联合结构成员的数组。 假设我在 C++1 中有以下声明...