initializer-list相关内容
在下面的C++20程序中,我错误地在B{{{{A{}}}}}中额外放了一对花括号{}: #include struct A { A() { std::cout
..
..
如果我通过我的 GCC 4.7 快照传递以下代码,它会尝试将 unique_ptrs 复制到向量中. #include #include int main() {使用 move_only = std::unique_ptr;std::vectorv { move_only(), move_only(), move_only() };} 显然这不起作
..
可能重复: 我可以列出初始化一个只移动类型的向量吗? 我使用 gcc 4.6.1 编译这段代码 int main(){std::vector>向量({std::unique_ptr(new int(0)),std::unique_ptr(new int(1)),});返回0;} 在 g++ 的抱怨中,有类似的东西 /usr/lib/gcc/x86_64-unknown-linux-g
..
我有从单个超类型派生的不同类型的对象.我想知道在这样的循环范围内使用 std::initializer 列表是否有任何缺点: for(auto object: std::initializer_list{object1, object2, object3}) {} 是否完全可以且高效,还是使用数组更好?对我来说,std::array 解决方案似乎对编译器的限制更大,并且显式
..
我尝试用 gcc4.7 编译以下代码片段 向量>vp = {{1,'a'},{2,'b'}};//对于对向量,它就像一个魅力.向量>vt = {{1,0.1,'a'},{2,4.2,'b'}}; 但是,对于元组的向量,编译器会抱怨: 错误:从初始化列表转换为“std::tuple"将使用显式构造函数“constexpr
..
对我来说,pair 只是 tuple 的特例,但以下让我感到惊讶: pairp1(1, 2);//行元组t1(1, 2);//行对p2={1, 2};//行元组t2={1, 2};//编译错误 为什么我们用{}来初始化tuple会有区别? 我什至尝试了 g++ -std=c++1y 但仍然有错误: a.cc: 在函数'int mai
..
我们可以在 C++11 中通过两种方式初始化变量 一个: int abc = 7; 两个: int abc {7}; 这两种方法有什么区别? 编译器如何区别对待它们或执行这些代码的方式? 解决方案 短版 通过{..}初始化是列表初始化,禁止缩小转换.例如,如果 LLONG_MAX 是 long long int 的最大值,而您的 int 不能表示: int x
..
我在这里问了一个问题:initializer_list return 的Lifetime Extension 涉及非功能性代码: const auto foo = [](const auto& a, const auto& b, const auto& c) { return {a, b, c};}; 我相信 lambda 试图返回一个 initializer_list(这很糟糕,不要那样做.
..
也就是说,为什么会这样: struct S {};结构体{T(S& s) : s{s} {}S&s;};int main(){秒;t{s};} 给我一个 GCC 4.7 的编译器错误: test.cpp: 在构造函数 'T::T(S&)' 中:test.cpp:5:18: 错误:“S&"类型的非常量引用的初始化无效来自''类型的右值 ? 要修复错误,我
..
谁能告诉我,为什么要编译? 命名空间 ManagedConsoleSketchbook{公共接口 IMyInterface{int 属性{得到;放;}}公开课 MyClass{私有 IMyInterface 字段 = null;公共 IMyInterface 属性{得到{返回字段;}}}公开课计划{公共静态无效方法(MyClass @class){Console.WriteLine(@class
..
我正在使用聚合初始值设定项为单元测试设置静态数据块. 我想使用数组大小作为预期的元素数,但如果提供的初始值设定项太少,这可能会失败: my_struct_type 预期[14] ={{ 1.234, 0, 'c' },{ 3.141, 1, 'z' },{ 2.718, 0, 'a' }}; 这不会在 Visual Studio 2008 中产生编译器错误. 我希望能够这样使用
..
编辑:这确实是由 Visual Studio 中的错误引起的 - 它已经得到修复.将更新 2 应用到 Visual Studio 后,该问题无法重现(此处提供候选版本).我道歉;我以为我的补丁是最新的. 当我在 Visual Studio 2013 中运行以下代码时,我终生无法弄清楚为什么会出现段错误: #include #include 结构基{虚拟 int GetValue() { 返
..
我正在测试 vs2013 c++ initializer_list. 可以编译下面的代码.但是当我运行 exe 时崩溃了. #include #include 类基础{};派生类:公共基础{};void DoSomething(std::initializer_list > list){}int main(){自动 ip = std::make_
..
如果初始化器列表顺序与类中的变量顺序不匹配,为什么 gcc 会抛出嘶嘶声? class myClass{上市:国际A;国际B;我的课();};myClass::myClass() :乙(1),A2){} 将导致: file.h:274: 警告:'myClass::A' 将在之后初始化file.h:273: 警告: 'int myClass::Bfile.cpp:581: 警告:在此处初始化时
..
今天在我的项目中遇到内存问题,一个类使用 c++ 11 initializer_list.系统发出内存问题信号:“dbgdel.cpp 中的表达式 _BLOCK_TYPE_IS_VALID(pHead->nBlockUse).我将代码简化为一个简单示例,它不再抛出表达式,但问题从调试输出中变得明显.在我看来,这代码是正确的,它似乎也适用于 g++. #include #include #incl
..
可以将不可复制但可移动类型的 push_back 右值转化为该类型的向量: #include 结构体{S(int);S(S&&);};int main(){std::vectorv;v.push_back(S(1));v.push_back(S(2));v.push_back(S(3));} 但是,当我尝试使用相同的右值对向量进行初始化列表构造时,我收到有关需要复制构造函数的错误: #inc
..
我正在使用 gcc 4.9.1/Mingw 并使用以下代码编译代码: gcc test.c -otest.exe -std=c11 -pedantic-errors -Wall -Wextra 此代码给出了诊断: int main (void){char a[5] = {'h','e','l','l','o','\0'};} 错误:数组初始值设定项字符 a[5] 中的元素过多
..
考虑功能: templatevoid printme(T&& t) {对于(自动我:t)std::cout
..
我不明白为什么不能在操作员的 RHS 上使用初始化列表.考虑: class foo { };结构栏{模板bar(T const&...) { }};foo&运算符 最新的 Clang(还有 gcc)抱怨: clang.cc:14:9: 错误:不能在运算符“
..