代码之家  ›  专栏  ›  技术社区  ›  larsmoa

变量浮点C++函数在获取浮点数的参数时不起作用。

  •  1
  • larsmoa  · 技术社区  · 16 年前

    我有一个可变模板函数:

    template<typename T, typename ArgType>
    vector<T>
    createVector(const int count, ...)
    {
      vector<T> values;
      va_list vl;
      va_start(vl, count);
      for (int i=0; i < count; ++i)
      {
        T value = static_cast<T>(va_arg(vl, ArgType));
        values.push_back(value);
      }
      va_end(vl);
      return values;
    }
    

    这适用于T和argtype的某些(对我来说,很奇怪)配置,但不是我期望的那样:

    // v1 = [0.0, 1.875, 0.0]
    vector<float> v1 = createVector<float, float>(3, 1.0f, 2.0f, 3.0f);
    // v2 = [0.0, 1.875, 0.0]
    vector<float> v2 = createVector<float, float>(3, 1.0, 2.0, 3.0);
    // v3 = [1.0, 2.0, 3.0]
    vector<float> v3 = createVector<float, double>(3, 1.0, 2.0, 3.0);
    // v4 = [1.0, 2.0, 3.0]
    vector<float> v4 = createVector<float, double>(3, 1.0f, 2.0f, 3.0f);    
    // v5 = [1.0, 2.0, 3.0]
    vector<double> v5 = createVector<double, double>(3, 1.0, 2.0f, 3.0);  
    

    当argtype是double(即使传递float)时,为什么这会起作用,而当它是float时,为什么不起作用?

    1 回复  |  直到 16 年前
        1
  •  6
  •   Anthony Williams    16 年前

    浮点值在传递给变量函数时作为双精度数传递,就像小于 int 作为通过 int .