变量名C ++后的括号

时间:2015-06-05 07:46:08

标签: c++ syntax

使用以下源代码(它是开源的),我从未在变量名后看到括号。 UDefEnergyH绝对是一个变量,如第1行所示。任何人都可以告诉我这些括号是做什么的吗?真的不知道如何谷歌这个。感谢。

bins[0] = UDefEnergyH.GetLowEdgeEnergy(size_t(0));
vals[0] = UDefEnergyH(size_t(0)); //Don't know what this does???
sum = vals[0];
for (ii = 1; ii < maxbin; ii++) {
    bins[ii] = UDefEnergyH.GetLowEdgeEnergy(size_t(ii));
    vals[ii] = UDefEnergyH(size_t(ii)) + vals[ii - 1];
    sum = sum + UDefEnergyH(size_t(ii));
}

它在头文件中声明:

G4PhysicsOrderedFreeVector UDefEnergyH;

3 个答案:

答案 0 :(得分:7)

operator()的tyupe显示UDefEnerfyH已超载。

执行此操作的一种方法是this solution

#include <iostream>
using namespace std;

struct MJ {
    void GetLowEdgeEnergy(size_t arg) {
        cout << "GetLowEdgeEnergy, arg = " << arg << endl;
    }
    void operator ()(size_t arg) {
        cout << "operator (), arg = " << arg << endl;
    }
};

int main() {
    MJ UDefEnergyH;
    UDefEnergyH.GetLowEdgeEnergy(42);
    UDefEnergyH(42);
    return 0;
}

答案 1 :(得分:1)

似乎你指的是班级G4SPSEneDistribution中的字段。它的类型是G4PhysicsOrderedFreeVector。并查看其members here。正如你所看到的那样operator() overloaded,显然这就是第二行所谓的内容。找出它的作用并不容易,但是如果您查看标题文件for G4PhysicsVector中的注释,您会看到:

00100          // Returns simply the value in the bin specified by 'binNumber'
00101          // of the dataVector. The boundary check will not be Done. If 
00102          // you want this check, use the operator [].

答案 2 :(得分:0)

这就是所谓的直接初始化,它首先使用'0'作为立即参数构造对象,然后将其分配给vals数组的第一个索引。