我是一名Java程序员,我正在自学C++。
我想了解结构解引用运算符是如何工作的。具体来说,下面这行代码的作用是什么?
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)返回的布尔值是否是elements类的给定示例的一部分。但是,当我尝试使用上面的cout行公开elements[i]或test(arga,argb)的底层值时,编译器会抛出错误,直到我注解掉这些行。
在Java中,我可以摆弄它,直到我找到彼此对应的每个值,然后我就可以理解这行代码了。我怎么能弄清楚这行代码在C++中做了什么?我很想在网上看到一些参考资料,如果他们是可用的。
3条答案
按热度按时间v9tzhpje1#
字符串
如果我们将语句分解,从 * 左到右 * 阅读,我们将以下面的内容结束:
1.访问名为
elements
的数组(或类似数组的 *)实体中的第i
个元素1.被访问的元素(
elements[i]
)是指向对象的指针1.在
elements[i]
上调用名为test
的 member-function 并传递两个参数;arga
和argb
如果我们忽略你写了
std::cout >>
而不是std::cout <<
(后者是正确的形式)的事实,我们最终会有两个原因导致你所描述的错误:1.你的编译器抱怨
std::cout << element[i]
,因为没有找到合适的重载来处理element[i]
类型的实体和std::ostream&
(这是std::cout
的基础类型)。1.你的编译器抱怨
std::cout << test (arga, argb)
,因为在名为test
的作用域中没有接受两个与arga, argv
对应的参数的函数。在你的代码片段中,test
是一个属于实体的 member-function,它不能被自己调用。dly7yett2#
欢迎来到C++。
首先,输出的语法是:
字符串
你猜对了,test是一个返回布尔值的函数。这里elements[i]是一个指针,指向一个有这个test函数的结构元素。
要学习C++,你可以使用我写的these articles。
33qvvth13#
由于许多受访者告诉我,我需要在他们回答之前提供代码,我深入研究了代码,并重新编写了一些东西,告诉我这行:
字符串
是一个测试,看看元素[i]的布尔成员函数是否为真。
我写的c++程序在这个上下文中识别->的含义是:
型
感谢所有让我明白这一点的人。