gpt4 book ai didi

c++ - 变量后的两个括号?

转载 作者:太空狗 更新时间:2023-10-29 23:40:28 26 4
gpt4 key购买 nike

我在一个方法中有这样的东西

    autoPtr<LESModel> LESModel::New   
95 (
96  const volVectorField& U,
97  const surfaceScalarField& phi,
98  transportModel& transport,
99  const word& turbulenceModelName
100 )
101 {
...
122 dictionaryConstructorTable::iterator cstrIter =
123  dictionaryConstructorTablePtr_->find(modelType);
...
143 return autoPtr<LESModel>
144  (
145  cstrIter()(U, phi, transport, turbulenceModelName)
146  );
147  }

如果我是对的cstrIter是类 dictionaryConstructorTable::iterator 的变量(虽然找不到此类)并从第 143 行开始构造函数 autoPtr<LesModel>被调用并返回结果。构造函数后面的括号 autoPtr<LESModel>因此应该是参数,因为 cstrIter 是一个变量,我想知道变量后面的两个括号是什么意思。也许我误读了什么?

最佳答案

C++ 支持“运算符重载”,这意味着您可以定义支持语法的类型,如 a + b。这通过使用诸如 operator+ 之类的名称定义函数来实现。当可重载运算符与用户定义类型一起使用时,C++ 会查找具有这些特殊名称的函数,如果找到合适的函数,则将运算符视为对该函数的函数调用。

可以重载的运算符之一是函数调用运算符。当您像使用函数一样使用对象名称时,将调用名为 operator() 的成员函数:

struct S {
void operator() (void) {
std::cout << "Hello, World!\n";
}
};

int main() {
S s;
s(); // prints "Hello, World!\n"
}

看起来 dictionaryConstructorTable::iterator 重载了函数调用运算符并返回了一些也重载了函数调用运算符的类型(或者只是使用内置运算符)。

用普通成员函数代替函数调用运算符的使用可能会使发生的事情更清楚:

return autoPtr<LESModel>( cstrIter.foo().bar(U, phi, transport, turbulenceModelName)); 

关于c++ - 变量后的两个括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19938916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com