首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >静态铸造回传式

静态铸造回传式
EN

Stack Overflow用户
提问于 2016-10-11 03:52:52
回答 1查看 339关注 0票数 1

在编译时,不能将非常量表达式从'int‘缩小到result_type。此错误发生在突出显示的位置。我将如何将其发送到static_cast()。我很难弄清楚我需要改变什么。

代码语言:javascript
运行
复制
   class UniformRandom
    {
      public:
        **UniformRandom( int seed = currentTimeSeconds( ) ) : generator{ seed }**
        {
        }

      private:
        mt19937 generator;

    };
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-11 08:56:15

这是因为在使用{}时,您使用generator.And来初始化标准草案n4296:If a narrowing conversion is required to initialize any of the elements, the program is ill-formed.

形成标准草案n4296:

缩窄转换是隐式转换。 -从浮点数类型到整数类型,或 -从长双到双或浮动,或从双到浮动,除非源是一个常量表达式,转换后的实际值在可以表示的值范围内(即使不能准确表示),或 -从整数类型或非作用域枚举类型到浮点类型,除非源是常量表达式,转换后的实际值将符合目标类型,并在转换回原始类型时生成原始值,或 -从整数类型或非作用域枚举类型到不能表示原始类型的所有值的整数类型,除非源是一个常量表达式,其积分提升后的值将适合目标类型。

举个例子:

代码语言:javascript
运行
复制
#include <iostream>

using namespace std;

int main()
{
    int a = {1.2};
    return 0;
}

它给出了错误:error: narrowing conversion of '1.2e+0' from 'double' to 'int' inside { } [-Wnarrowing] int a = {1.2};

要解决这个问题:

generator{seed} => generator(seed).

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39970263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档