从int到向量的隐式转换?

2023-12-31

vector<T>有一个构造函数,它采用向量的大小,据我所知它是explicit,可以通过下面的代码无法编译来证明

void f(std::vector<int> v);
int main()
{
    f(5);
}

我无法理解并要求您解释的是为什么以下代码可以编译

std::vector<std::vector<int>> graph(5, 5);

它不仅可以编译,而且实际上将图的大小调整为 5 并将每个元素设置为由五个零组成的向量,即与我通常编写的代码相同:

std::vector<std::vector<int>> graph(5, std::vector<int>(5));

如何?为什么?

编译器:MSVC10.0


好吧,看来这是一个 MSVC bug(又一个)。如果有人可以在答案中详细说明该错误(即总结重现该错误的情况),我会很乐意接受


这并不是真正的错误。问题是在第一段代码无法编译的情况下允许第二段代码可能会出现什么问题?

问题是,虽然您在执行此操作时想要调用哪个构造函数对您来说似乎很明显:

std::vector<std::vector<int>> graph(5, 5);

对于编译器来说并不是那么清楚。特别是有两个构造函数重载可以潜在地接受参数:

vector(size_type,const T& value = T());

template <typename InputIterator>
vector(InputIterator first, InputIterator last);

第一个需要转换5 to size_type(这是无符号的),而第二个是完美匹配的,所以这将是编译器选择的......

...但是编译器要求第二次重载,如果推导的类型InputIteratorisintegra 的行为就好像它是对以下内容的调用:

vector(static_cast<size_type>(first),static_cast<T>(last))

C++03 标准有效要求的是第二个参数是明确地由原始类型转换而来int到目的地类型std::vector<int>。因为转换是显式的,所以会出现错误。

如果参数实际上不是输入迭代器,C++11 标准更改了措辞以使用 SFINAE 禁用迭代器构造函数,因此在 C++11 编译器中应该拒绝代码(这可能是一些人声称这一点的原因)是一个错误)。

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

从int到向量的隐式转换? 的相关文章

  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • Raphael 中的委托拖动功能

    使用 Raphael 我希望能够拖动包含文本对象的形状 下例中的椭圆 拖动形状或文本 我希望通过设置传递给文本元素的函数来做到这一点drag 委托给关联形状的方法 尝试使用更加多态的方法来另一个 https stackoverflow co
  • RTK 查询:一次性转换所有查询响应

    通过 RTK 查询 端点的响应可以转换为transformResponse https redux js org tutorials essentials part 8 rtk query advanced transforming res
  • “使用 POSTMAN 发布图像数据”

    我正在尝试将数据发布到我的 API 我有一个模型image字段其中 image models ImageField 我的本地盒子上有一张图像 我正在尝试发送该图像 我发送正确吗 id 3 uid 273a0d69 uuid 90 image
  • C# Azure 存储 Blob 上传 TransactionScope

    是否有某个类允许在 azure blockblob 操作上使用 transactionscope 进行回滚 我想让这个工作 CloudBlockBlob blockBlob private void UploadPicture Stream
  • 访问自定义授权 MVC4 Web Api 中的 post 或 get 参数

    是否可以通过 HttpActionContext 对象访问 post 或获取参数 我有一组传感器 用于将数据记录到提供 REST API 的 Web 服务器 我想引入某种身份验证 授权 让传感器在数据中包含其硬件 ID 然后在数据库中查找该
  • 当我在cmd上运行meteor应用程序时它崩溃了

    我是流星新手 请帮忙 我创建了我的第一个应用程序 但是当我尝试运行它以便可以在浏览器上查看它时 我收到以下错误消息 C projects myapp gt meteor C projects myapp gt Started proxy g
  • 使用 R 合并数据帧的互补行

    我有这样一个数据框 0 weekday day month year hour basal bolus carb period h 1 Tuesday 01 03 2016 0 0 0 25 NA NA 0 2 Tuesday 01 03
  • 调用方法的义务

    在VB NET 中 当您创建用户控件类时 您有义务在构造函数中调用子InitializeComponent 如果不这样做 您将收到如下警告消息 Public Sub New 中 设计者生成的类型 MyUserControl 应该调用 初始化
  • 方法链和流畅接口之间的区别

    我想知道方法链接和流畅接口之间的确切区别 据我了解 方法链只是运行先前方法返回对象的方法 同时避免临时变量 这方面的一个例子可能是 Integer parseInt str intValue 相对于Fluent Interface 对象的每
  • 使用clearTimeout取消超时事件

    我有以下代码 但明确的超时不起作用 我不明白为什么 有人有任何想法吗 使用Prototype框架 function foo navigation observe mouseover function event clearTimeout b
  • MVVM - 从 ViewModel 后面的代码中调用 UI 逻辑

    我正在使用 MVVM 模式开发一些 Net XAML 应用程序 根据 MVVM 我将应用程序逻辑保留在 VM 中 并在代码隐藏中执行与 UI 相关的操作 但我需要在Code Behind中执行一些UI相关的代码来响应VM中的一些逻辑 例子
  • 从文本文件读取并存储在字符串中[重复]

    这个问题在这里已经有答案了 我们如何从文本文件中读取数据并将其存储在字符串变量中 是否可以在方法中传递文件名 然后返回文件中的文本字符串 我必须导入哪些类型的实用程序 一份陈述清单会很棒 这些是必要的进口 import java io Bu
  • RVM ruby​​ on Rails 问题 OpenSSL

    当我创建 Rails 应用程序时 我遇到了一些错误 但我不知道它们的含义或如何修复它们 我认为这可能是获得帮助的最佳方法 而不是解释我将输出正在发生的事情 j3 j3 code rails projects rails new first
  • 在单元测试期间模拟 Angular2 中的自定义服务

    我正在尝试为我的服务中使用的组件编写单元测试 组件和服务工作正常 成分 import Component from angular core import PonyService from services import Pony from
  • ExcludeFoldersFromDeployment 在发布配置文件中不起作用

    我尝试使用 ExcludeFoldersFromDeployment 排除发布配置文件中的文件夹 但在发布到 azure app 服务时它不是 wxinclude 文件夹位置 a b c 文件夹名称 如果有人可以帮忙请告诉我 如果您在此环境
  • 有条件 if 对于许多值,更好的方法

    有没有更好的方法来处理检查多个值 当我有超过 3 个选择时 事情就开始变得非常忙碌 if myval something myval other myval third PHP有一个函数叫做in array 像这样使用 in array m
  • C 语言蓝牙编程 - 安全连接和数据传输

    我正在尝试用 C 编写程序通过蓝牙发送 接收数据 我参考了 Albert Huang 写的一本书 里面有示例程序和很好的信息来源 关联 https people csail mit edu albert bluez intro index
  • mysql检查两列之间的预订重叠时间

    我有一个表预订 其中有两列 job time beg 和 job time end 工作从 8 00 开始一直持续到 16 00 现在我需要确定可用时间是否与给定时间重叠 以便我知道我不想在给定时间内预订时间 我在用 select coun
  • 结构体中的枚举; c 新手

    我想知道使用的语法enum in a struct in C 我见过各种例子struct union enum组合用于创建复杂类型 例如 struct MyStruct enum TYPE 1 TYPE 2 TYPE 3 type unio
  • 从int到向量的隐式转换?

    vector