静态回送类型

时间:2016-10-11 03:52:52

标签: c++ explicit

编译时我得到一个非常量表达式,不能从类型'int'缩小到result_type。此错误发生在突出显示的位置。我怎么会有机会进入static_cast()。我无法弄清楚我需要改变什么。

   class UniformRandom
    {
      public:
        **UniformRandom( int seed = currentTimeSeconds( ) ) : generator{ seed }**
        {
        }

      private:
        mt19937 generator;

    };

1 个答案:

答案 0 :(得分:2)

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

形成标准草案n4296:

  

缩小转化是隐式转化

     

- 从浮点类型到整数类型,或

     

- 从long double到double或float,或从double到float,除非source是常量表达式,并且转换后的实际值在可以表示的值范围内(即使它无法准确表示) ),或

     

- 从整数类型或未范围的枚举类型到浮点类型,除非源是常量表达式,转换后的实际值将适合目标类型,并在转换回目标类型时生成原始值原始类型,或

     

- 从整数类型或未范围的枚举类型到不能表示原始类型的所有值的整数类型,除非source是一个常量表达式,其整数提升后的值将适合目标类型。

一个例子:

#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} =&gt; generator(seed)