首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++中的对象初始化

C++中的对象初始化
EN

Stack Overflow用户
提问于 2012-02-24 03:29:15
回答 2查看 115关注 0票数 1

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

代码语言:javascript
运行
复制
template <typename String>
void test_numbers()
{
  SampleClass<String> compare;
  String lhs = "abc";
  String rhs = "efg";
  check_equality(compare(lhs, rhs), true);
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-24 03:32:19

代码语言:javascript
运行
复制
//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()实现,允许它以函数的形式出现,接受参数。

你可以很容易地做你自己的。

代码语言:javascript
运行
复制
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

这很有用的原因是因为我们可以这样做。

代码语言:javascript
运行
复制
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://en.cppreference.com/w/cpp/algorithm配合使用的http://msdn.microsoft.com/en-us/library/5tk49fh2(v=vs.80).aspx

票数 4
EN

Stack Overflow用户

发布于 2012-02-24 03:33:07

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9419853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档