使用“var{args}”进行初始化是 C++0x 的新功能,还是仅仅是语法糖?

2023-11-29

我正在读C++0x 常见问题解答并遇到了详细说明初始值设定项列表的部分。这些例子主要是以下内容的变体:

vector<int> vi = { 1, 2, 3 };
vector<int> vj({1, 2, 3});
// etc.

然而,还列出了以下形式:

vector<int> vk{2};

这种形式出现在常见问题解答的其他地方,我很好奇它在语义上是否与最初的两种形式不同,或者只是语法糖vk({x, y, z}).


The ({1, 2, 3})form 调用构造函数vector<int>直接,并作为第一个参数传递{1, 2, 3}。你可以传递更多的参数

vector<int> vk({1, 2, 3}, myAllocator);

If vector<int>不会有第一个参数是 an 的构造函数initializer_list或可以通过以下方式初始化的其他类型{1, 2, 3}(就像另一个容器类),它不起作用。在你的情况下它有效,因为vector<int>实际上有一个构造函数,其第一个参数是initializer_list<int>。这就像正常的函数调用一样

void f(vector<int> const& vk);
int main() { f({1, 2, 3}); }

如果省略括号,如vector<int> vk{1, 2, 3},确切的含义取决于类。 Avector<int>有一个初始化列表构造函数,它是第一个参数为 type 的构造函数initializer_list<int>(可选地引用它),以及带有默认参数的所有其他参数。如果该类具有这样的构造函数,则初始值设定项列表将传递给该构造函数。或者,该类可以简单地是一个聚合(例如struct A { int a; int b; int c; };,初始化列表将初始化成员)或者有一个接受的构造函数3分离int论据。

最后= { 1, 2, 3 }形式几乎与省略括号的版本相同(即只是删除=),除了它禁止使用显式构造函数(即他们将其声明为explicit vector(initializer_list<int>);或者他们宣布了explicit vector(int, int, int);相反,如果您使用,则会导致错误= { 1, 2, 3 }).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用“var{args}”进行初始化是 C++0x 的新功能,还是仅仅是语法糖? 的相关文章

  • 是否可以使静态控件透明?

    我正在尝试实现一个静态控件 该控件刷新 更改文本 以响应每秒发生一次的某个事件 由于我不想每秒绘制整个客户区域 所以我决定使用静态控件 现在的问题是父窗口被蒙皮 这意味着它有自定义位图作为背景 而静态控件没有适应 所以我正在寻找使静态控件的
  • 求 a 范围内的 pow(a^b)modN

    对于给定的b and N以及一系列a say 0 n 我需要找到ans 0 n 1 where ans i 没有a s为此pow a b modN i 我在这里搜索的是可能的重复pow a b modN对于一系列a 以减少计算时间 例子 i
  • 在 2 个 .c 文件之间共享函数

    dir1有dir2 file1 c和file1 h dir2 有 file2 c 现在 如果我想在 file2 c 中访问 file1 c 中定义的函数 我需要在 file1 h 中声明它并在 file2 c 中包含 file1 h 这是一
  • 在子目录中构建共享库

    我正在尝试构建一个使用一些 C 代码的 R 包 我有一个编译为可执行文件的 C 库 可以从命令行调用 有一个与之关联的 Makefile 我正在尝试获取信息here http cran r project org doc manuals R
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • VS2010中VSHost.exe不断启动

    我正在 VS2010 中使用一个包含大量项目的解决方案 但它不断变得无响应 我注意到的一件事可能是一条线索 尽管我尚未开始任何调试 但 MyApplicationName vshost exe 不断出现在进程列表中 也许每当构建发生时它就会
  • 命令中带空格的 Windows C 系统调用

    我无法使用名称和参数中的空格进行系统调用 例如 system c program files something example exe c my files example txt 我尝试过各种我知道的方法来逃避 但没有任何效果 我努力了
  • 测试从 ComboBox 派生的自定义控件

    我创建了一个从 ComboBox 派生的控件 并希望对其行为进行单元测试 但是 它在我的单元测试中的行为似乎与实际应用程序中的行为不同 在实际应用程序中 Combobox DataSource 属性和 Items 同步 换句话说 当我更改
  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • argc 和 argv 在 Windows 中没有用吗?

    在 Linux 中 argc 和 argv 计算终端中的参数 但在 Windows 中 我找不到放置第二个参数的地方 事实上 每次我运行该程序时 它都会创建那个丑陋的黑色窗口 我什至没有机会给出任何争论 那么这两个变量在Windows平台下
  • 如何在 C++ 中初始化嵌套类的构造函数

    我在初始化嵌套类构造函数时遇到问题 这是我的代码 include
  • WPF MVVM后台打印数据绑定问题

    我正在使用 wpf mvvm 开发一个销售点应用程序 在交易生命周期的许多阶段 都会在后台打印收据 我已经使用其他示例在后台生成和打印收据 我正在后台打印一个 UserControl 一切看起来都很棒 然后 我为该控件创建了 ViewMod
  • 实体框架中的导航属性是什么

    我是实体框架的新手 当Visual Studio创建模型图时我们主要可以看到Entities Propertie和Navigation Properties这两个东西 那么这些Navigation Properties是什么 如何使用它们
  • 为什么 ASP.Net MVC Range 属性采用类型?

    我只是想知道为什么范围验证属性可以采用类型和两个字符串作为参数 这是为了根据枚举或类似的东西验证字符串吗 另外 我想做的是找到一种简单的方法来验证必须出现在枚举中的 3 个字符的字符串 有什么建议吗 谢谢 亚历克斯 我确实发现你提到的 Ra
  • 合并大文件的最佳方法是什么?

    我必须合并数千个大文件 每个大约 200MB 我想知道合并这些文件的最佳方法是什么 行将有条件地复制到合并文件中 可以使用 File AppendAllLines 或使用 Stream CopyTo 吗 使用 File AppendAllL
  • 在 C# 中为 ListBox 分配数据源时,如何从 ListBox 中删除所选项目?

    在 C 中为 ListBox 分配数据源时 如何从 ListBox 中删除所选项目 尝试删除时出现错误 设置 DataSource 属性后 无法修改项目集合 但是当我尝试从数据源 数据表 中删除项目时 它会抛出错误 因为 数据行不在当前行集
  • Task.Delay 到底是如何工作的?

    他们说 Task Delay 是一个异步 Thread Sleep 为了测试这一点 我写了下面的代码 我希望立即打印 One 然后 3 秒后将打印结果变量 15 2 秒后 将打印 Two 但似乎并非如此 一 不会立即打印 3 秒后打印 On
  • 预览MouseMove 与 MouseMove

    我有相当多的 XAML 经验 但最近我注意到我的大多数同事都使用预览鼠标移动代替鼠标移动事件 我一直用鼠标移动它对我很有帮助 但我忍不住问我什么时候应该使用预览鼠标移动什么时候鼠标移动 有什么区别 各自有什么优点和缺点等等 PreviewM
  • 如何以一对一/零关系更新员工和身份用户

    我正在尝试更新员工记录 也想更新身份用户 如果我先单独更新身份用户 例如 UserManager Update user Context Entry employee State System Data Entity EntityState
  • 从不同的线程访问对象

    我有一个服务器类 它基本上等待来自客户端的连接 在该类中 我创建了一个 NetworkStream 对象 以便能够从客户端接收字节 由于 NetworkStream Read 方法不是异步的 这意味着它将等到从客户端读取字节才能继续执行类似

随机推荐

  • 异步.NET控制台程序中的线程控制流[重复]

    这个问题在这里已经有答案了 我在 C 中摆弄 async await 只是为了深入研究一些线程控制流 并偶然发现了一个不寻常的行为 我非常感谢对此的澄清 即使任务本身在后台执行 await 之后的执行也会在调用线程上继续 这是有意义的 事实
  • 自定义 Firebase 用户身份不使用 Firebase 用户 uid

    我正在玩FirebaseUI Android并有一个关于在唯一标识用户时使用什么 ID 的问题 FirebaseUI 管理身份验证权限并返回IdpResponse目的 这可以是例如Facebook Twitter 电话等等 非常感谢背后的每
  • 使用 ArrayAdapter 在 listView 中添加标题

    我正在尝试使用数组适配器显示列表视图 我从数据库中获取数组 ArrayAdapter
  • 如何偏移元素的第 n 个子元素

    我正在尝试提取元素的第 n 个子元素 以便元素显示堆叠在同一个容器中 我试过读一遍https developer mozilla org en US docs Web CSS nth child 但无济于事 我在 jsfiddle 中重现了
  • 散景叠加 GridPlot 中的多个绘图对象

    假设我有一个类 它保存一些数据并实现一个返回散景图的函数 import bokeh plotting as bk class Data def plot self kwargs do something to retrieve data r
  • 不使用 numpy 搜索二维列表

    我正在定义一个接受两个参数的函数 int and a list 如果该函数在列表中找到该整数 则返回其值坐标 例如 我该如何处理以下列表中的数字 4 不使用numpy l 0 0 0 0 0 0 0 0 0 0 2 1 1 0 1 1 1
  • 是否可以在 css 中创建 2 轴 4 颜色渐变(双线性渐变)?

    我的 JavaScript 示例和
  • 定时器(System.Threading)线程安全

    有谁知道这段代码是否是线程安全的 或者我在调用timer2 Change时是否必须使用锁 Timer timer1 new Timer timerCallback1 Timer timer2 new Timer timerCallback2
  • “错误:并非所有代码路径都会返回值。”

    我的代码在编译时抛出名义异常 我不明白为什么会发生这种情况 因为经过广泛搜索后 发生错误的原因似乎只有在没有退出返回语句的情况下才存在 但我认为我的代码是完全包容的 bool CheckExisting Account loginAcc n
  • 制作 Python 扇形图/扇形图

    我正在寻找用Python制作一个扇形图类型的线图 它类似于英格兰银行利率扇形图像这个 我非常擅长使用 matplotlib 来绘制标准线 条形图 散点图 但这似乎需要一些更自定义的实现 我在 Google 上搜索过 但似乎找不到任何执行此类
  • Google ARCore 域模型示例

    我正在尝试阅读并理解 Google ARCore 的域模型 特别是安卓软件开发工具包包 目前该SDK位于 preview 模式 因此没有任何教程 博客 文章等可以帮助您了解如何使用该 API 甚至 Google 本身也建议仅阅读源代码 源代
  • 如何将图像裁剪为圆形?

    我正在尝试将图像裁剪为圆形 其中圆形之外的区域是白色的 新的图像尺寸将与原始图像尺寸相同 只是有效地舍入图像 我熟悉如何使用 GDI 裁剪图像 通过获取现有图像并将其复制到新图像中来绘制矩形 正方形 但我不知道如何用白色填充圆弧 圆形的外部
  • 下拉选择表单,转到提交时的 URL

    有没有一种简单的方法可以让用户从 SUBMIT 上的下拉列表转到 URL 而不是 onChange 我有这个代码
  • 突然的错误请求 - 调试 Visual Studio 期间动词无效

    在开发过程中我突然开始收到以下错误消息 Bad Request Invalid Verb HTTP Error 400 The request verb is invalid 正在开发的网站通过 Visual Studio 在 ISSExp
  • 使用 Android Gradle Plugin v. 3.5.2 构建 Android 项目时,我的构建失败

    具有以下内容 at android databinding tool expr Expr resolveListeners Expr java 211 at android databinding tool expr Expr resolv
  • 默认情况下将参数设置为等于另一个参数的值

    我见过很多次 Python 程序员 包括我自己 希望给定函数中的变量默认为另一个变量 如果未给出该值 这是针对问题的三种不同解决方案的演练 每种解决方案的复杂性和稳健性都在增加 那么 继续吧 这是给你的 如果你会说 我正在尝试这样做 def
  • 重置/修复 Xcode 4.5 代码完成

    Xcode 4 5 中的新 功能 之一应该是极大地改进代码完成 它应该定期了解您输入的内容 并更频繁地提供这些内容作为代码完成的选项 然而 对我来说这根本不起作用 NSString 是著名的糟糕代码完成词之一 当我输入它时 我得到 NS N
  • styles.xml 中的自定义属性

    我创建了一个自定义小部件 并在layout xml 中声明它 我还在 attr xml 中添加了一些自定义属性 但是 当尝试在 styles xml 中的样式中声明这些属性时 它给了我No resource found that match
  • wix,安装文件并运行bat文件

    我在使用 wix 构建 msi 安装程序时遇到问题 该安装程序将安装一些 bat 文件并运行它 我在互联网上找到了一些示例 但我无法使其工作 这是我的 wix 源文件
  • 使用“var{args}”进行初始化是 C++0x 的新功能,还是仅仅是语法糖?

    我正在读C 0x 常见问题解答并遇到了详细说明初始值设定项列表的部分 这些例子主要是以下内容的变体 vector