草庐IT

default-initialization

全部标签

C++ 语法 : default and delete modifiers

今天我偶然发现了这样一个代码片段:classA{A()=default;A(constA&)=delete;...}我从未见过delete或default关键字。它们是C++11标准的一部分吗?它们的用途是什么? 最佳答案 现在可以默认或删除特殊成员函数。已删除的成员函数仍然参与重载决议,但如果它被选中,则程序格式错误并且编译停止并提供有用的诊断。这是编写不可复制类之类内容的正确方法,并且用户会收到正确的错误消息。默认成员函数“做它应该做的”,例如默认的默认构造函数默认初始化所有基类和成员,并且主体为空;默认复制构造函数复制每个基对

c++ - 错误 C2536 : cannot specify explicit initializer for arrays in Visual Studio 2013 的解决方法

下面的代码不能用VisualStudio2013编译,而它应该:classA{A():m_array{0,1,2}{}//errorC2536:'A::A::m_array':cannotspecifyexplicitinitializerforarraysprivate:intm_array[3];};参见bugreport了解更多详情。有哪些可能的解决方法? 最佳答案 如评论所述,您可以尝试此解决方法。classA{A():m_array({0,1,2}){}private:std::arraym_array;};似乎VS201

c++ - 什么语言规则允许 C++11 推断这是一个 initializer_list 对?

在C++11中,初始化std::map似乎是合法的如下:std::mapmyMap={{"One",1},{"Two",2},{"Three",3}};直觉上,这是有道理的——大括号括起来的初始化器是一个字符串对列表,std::map::value_type是std::pair(可能具有一些const资格。但是,我不确定我是否理解此处的输入方式。如果我们在这里去掉变量声明,只用大括号括起来的初始化器,编译器就不会知道它正在查看std::initializer_list>。因为它不知道括号对代表std::pair秒。因此,编译器似乎以某种方式推迟了将类型分配给大括号括起来的初始化程序的行

c++ - "defau1t:"(不是 "default:")是标签的有效值吗?

这个问题在这里已经有了答案:Defaultcaseinaswitchcondition(3个答案)关闭6年前。为什么这段代码可以正常编译和运行。我在l的位置写了defau1t而不是default,1。#includeintmain(){inti=4;switch(i){case3:break;defau1t:break;}}

c++ - 'default' 作为变量名

在调试一些代码时,我遇到了一个名为default的数组。我认为不允许关键字作为变量名。#include"stdafx.h"#includeintmain(){intdefault=5;printf("%d\n",default);return0;}现在上面的代码可以在VS2008上顺利编译。'default'不是关键字吗?为什么它可以作为变量名?副作用?附注:Infragistics::Win::UltraWinToolbars::ToolbarsCollection有一个同名的属性! 最佳答案 这是一个knownissue在VC+

gcc 4.8.1 : list-initialization for copy constructor doesn't work 中的 C++11

我鼓励这个问题:如果我有classA{public:};intmain(){Aa{};Ab{a};}gcc给出:moves.cc:Infunction‘intmain()’:moves.cc:15:7:error:toomanyinitializersfor‘A’Ab{a};但是当我使用Ab(a)而不是Ab{a}时,所有编译都正确。如果我声明默认构造函数,它也会编译。为什么会这样? 最佳答案 该类是一个聚合,因此列表初始化将执行聚合初始化,并且不会考虑隐式声明的构造函数。因为没有数据成员,所以只有空列表可以是有效的聚合初始化器。Bu

c++ - 静态 C++ 映射初始化错误 C2552 : non-aggregates cannot be initialized with initializer list

我正在尝试使用以下代码在header中初始化map,但它一直在标题中显示错误。我正在使用C++11,所以这应该是可能的,对吧?typedefstd::map>AnimationSpeedMap;AnimationSpeedMapAnimationSpeeds={{NPCAnimation::WALK,{{Direction::LEFT,sf::milliseconds(100)},{Direction::RIGHT,sf::milliseconds(100)},{Direction::UP,sf::milliseconds(200)},{Direction::DOWN,sf::mill

c++ - 当其他构造函数存在时,为什么 "ctor() = default"会改变行为?

为什么structwrapper{explicitwrapper(void*);wrapper()=default;intv;};intmain(){returnwrapper().v;}//YoushouldrunthisinDebugmode返回0xCCCCCCCC,而structwrapper{wrapper()=default;intv;};intmain(){returnwrapper().v;}和structwrapper{intv;};intmain(){returnwrapper().v;}都返回0? 最佳答案 在值

iphone - 警告 : XXXX has different visibility (default) in YYYY and (hidden) in ZZZZ

我正在尝试制作一个使用OpenCV和另一个C++库的iPhone应用程序。它似乎可以很好地编译和链接。它确实有效。只是我想摆脱这个丑陋的警告:ld:warning:std::vector>::_M_insert_aux(__gnu_cxx::__normal_iterator>>,intconst&)hasdifferentvisibility(default)in/Users/nacho4d/Documents/Projects/iOS/iAR/opencv_device/lib/libcxcore.a(cxdatastructs.o)and(hidden)in/Users/nach

c++ - 为什么不首选 std::initializer_list 转换?

考虑这个片段:#include#includevoidf(std::vector){std::coutLiveonColiru如果你运行它,你可以看到f(int)重载是首选,即使std::vector有一个std::initializer_listconstructor(见#8)。问题:为什么首选将{42}转换为int(而不是转换为std::vector,因为{42}是一个std::initializer_list)? 最佳答案 在重载决议中,当考虑implicitconversionsequenceinlist-initializ