当前位置: 首页 > 知识库问答 >
问题:

错误缩小转换时使用自动

熊朝
2023-03-14

在使用自动进行隐式转换时出错。

使用int变量捕获v.size()的返回是可以的,但自动会出现问题。编译器错误确实表明这是由于转换范围缩小所致。但我想从内存的角度理解这是如何发生的,为什么auto不允许它这样做,而正常转换是可以的

#include <iostream>
#include <vector>
int main()
{
    auto v = std::vector<int>{ 1, 2, 3 };

    auto  c = 'h';
    auto n2 = int{c};
    std::cout<<n2<<" "<<c;

    auto size = int{v.size()};
    std::cout<<size;

    int size_1 = v.size();
    std::cout<<size_1;

}

由于以下行自动大小=int{v.size()}导致的错误;

主要的cpp:In函数“int main()”:main。cpp:11:27:错误:“v.std::vector::size()”从“std::vector::size\u type{aka long unsigned int}”缩小到{}[-Wnarrowing]内的“int”的转换范围

当这行被注释时,它工作得很好

#include <iostream>
#include <vector>
int main()
{
    auto v = std::vector<int>{ 1, 2, 3 };

    auto  c = 'h';
    auto n2 = int{c};
    std::cout<<n2<<" "<<c;

    //auto size = int{v.size()};
    //std::cout<<size;

    int size_1 = v.size();
    std::cout<<size_1;

}

输出

104 h3

演示链接

共有1个答案

聂炜
2023-03-14

这与自动无关。如果使用

int size = int{v.size()};

这里的问题是使用括号初始化来初始化临时的int。大括号初始化中的缩小转换是导致显示诊断的原因。

请注意

int size_1 = v.size();

也是一个缩小的转换,只是标准不要求发出警告/错误。

 类似资料:
  • 问题内容: 有最紧迫的时间试图弄清楚为什么缩小不起作用。 我已经通过数组对象在网络上根据大量建议在函数之前注入了我的提供者,但仍然是“未知提供者:aProvider <-a” 定期: 缩小: 任何建议将是必须的! 问题答案: AndrewM96的建议是正确的。 对齐和空格对于Uglify和Angular都很重要。

  • 问题内容: 我正在使用JSF设置表单(这是我的新手),并且在其中一个字段上收到消息。该字段实际上是一个具有自定义转换器的单独对象(如下文所示)。 这是我所拥有的(删除了不相关的代码): 我有一堂课: 我也有一个您在该类中引用的类: 那么对于我的表格,我有: 最后,对于我的转换器,我有: 现在,当我进入表单并提交时,我将获得状态旁边的内容。我在这方面还很新,感谢@BalusC,我一直很远。 任何帮助

  • 问题内容: 我试图理解Java中日益缩小的原始转换概念。这是JLS 5.1.3 所说的: 关于原始类型的22种特定转换称为“缩小原始转换”: 短字节或字符 字符到字节或短 从int到byte,short或char 长到字节,短,字符或整数 浮点到字节,short,char,int或long 双精度字节,短整数,字符,整数,长整数或浮点数 由于是隐式转换转换到,我们可以写出下面的代码: 演示 但这是

  • 当x超过3600秒时,有没有办法把x秒转换成y小时和z秒?类似地,当x超过60但小于3600秒时,使用Jodatime将其转换为“A分钟和b秒”?我明白我必须在PeriodFormatter中指定我需要什么,但我不想指定它--我想要一个基于秒值的格式化文本。 这类似于你在论坛上发帖,然后你的帖子最初会显示为“10秒前发布的”…一分钟后,你会看到“1分20秒前发布”,几周、几天、几年都是如此。

  • 在我的spark代码中有gson,它存储在字符串RDD中,我将其转换为键和值。 (1). (2). 但我收到了以下错误消息。谷歌。格森。JsonSyntaxException:java。伊奥。EOFEException:com第1行第2列的输入结束。谷歌。格森。格森。com上的fromJson(Gson.java:813)。谷歌。格森。格森。com上的fromJson(Gson.java:768)

  • 问题内容: 在angularjs中,我们将参数作为依赖项注入传递。例如, 所以当它缩小时,它变成 现在,a,b,c,d将不会被角度和整个代码分别解释为$ scope,$ rootScope,$ location和$ http无法工作。为此,angularjs提供了一种解决方案,即 我们可以使用上述语法注入不同的依赖项。直到我没有使用一些自定义的角度服务作为依赖项,此方法都有效。例如 如果我有类似的