C++中的对象初始化

Object initialization in C++

本文关键字:初始化 对象 C++      更新时间:2023-10-16

我正在查看某人的代码,我不明白对象是如何在这里初始化的:

template <typename String>
void test_numbers()
{
  SampleClass<String> compare;
  String lhs = "abc";
  String rhs = "efg";
  check_equality(compare(lhs, rhs), true);
}

对象比较创建为类类型SampleClass,然后在作为参数传递时分配2个字符串。这个初始化是如何工作的?有什么意见吗?建议?

//I am initialised with my default constructor (no args) 
SampleClass<String> compare;
//I am initialised with my `const char*` constructor (and assignment operator)   
String lhs = "abc";
String rhs = "efg";
//Compare (already initialised) is being invoked by it's `operator()`
check_equality(compare(lhs, rhs), true);

compare已构建。它实现了一个operator(),允许它作为一个函数出现,接受参数。

你可以很容易地自己做。

struct op_test{
    int i;
    op_test(int i_) : i(i_){}
    int operator()(int j)const { return j*i; }
};
:::
op_test ot(5);
ot(6); //5*6

这之所以有用,是因为我们可以做这样的事情。

std::vector<int> a(700); //700 ints
std::transform(a.begin(), a.end(), b.begin(), op_test(5));
//or
std::transform(a.begin(), a.end(), b.begin(), &my_func); //calls a function
std::transform(a.begin(), a.end(), b.begin(), [](int i){ return i*5; }); //lambda

请参见此处:http://msdn.microsoft.com/en-us/library/5tk49fh2(v=vs.80).aspx与有用http://en.cppreference.com/w/cpp/algorithm

它只是创建一个类型为SampleClass<String>的自动变量。然后用两个String参数调用它的operator()