【发布时间】:2013-06-19 18:22:22
【问题描述】:
我是一名尝试自学 C++ 的 Java 程序员。如果我一开始问简单的问题,请放慢我的脚步。
我想了解结构取消引用运算符的工作原理。具体来说,谁能告诉我以下代码行的明确含义?
if (elements[i]->test(arga, argb)) {}
test(arga,argb) 是同一类中的布尔函数,elements 是元素类实例的向量。这是紧接在上面一行的代码,我对此很感兴趣:
for (unsigned i = 0; i < elements.size(); ++i) {
T arga = INFINITY, argb = INFINITY;
//using namespace std;
//std::cout >> elements[i] >> std::endl;
//std::cout >> test(arga, argb) >> std::endl;
if (elements[i]->test(arga, argb)) {
//some code
}
}
似乎 if 行正在测试 test(arga,argb) 返回的布尔值是否是给定元素类实例的一部分。但是,当我尝试使用上面的 cout 行公开 elements[i] 或 test(arga,argb) 的基础值时,编译器会抛出错误,直到我将这些行注释掉。在java中,我可以摆弄这个,直到我找到彼此对应的每个值,然后我就会理解这行代码。但我不知道如何弄清楚这行代码在 C++ 中的作用。谁能给我一个明确的解释,最好通过一两个在线参考的链接来支持?
【问题讨论】:
-
你能出示
elements的声明吗? -
为了帮助您理解:在 C++ 中,我们区分
->和.,因为它们不会对相同的事物进行操作(指针与普通对象和/或引用)。但要将您与您的 Java 体验联系起来,您可以大部分将->翻译成.即。elements[i].test(arga, argb)。但请记住,C++ 在值和引用之间有所不同,而在 Java 中,几乎所有内容都是引用。 -
@syam 是对的,但在 C++ 中,您还可以为用户定义的类型定义取消引用运算符。因此,为了了解您的实际要求,有必要知道
elememts是什么,以及它持有什么类型,如果它持有指针以外的任何东西。 -
感谢大家的帮助。当我有时间深入研究并考虑你们每个人在说什么时,我将登录并探索这个。同时,向迄今为止尝试提供帮助的所有人 +1。
-
@CodeMed:同样,
elements的声明在哪里?在 C++ 中,如果不知道elements是什么,就没有有意义的方式来回答您的问题。
标签: c++ vector boolean operators