调用函数的不同方法
Different ways of calling functions C++
我知道这是一个非常基本的问题,但经过几次谷歌搜索和点击多个链接后,我仍然找不到答案。
我的问题是"。和"->"在函数调用在c++语言?
例如,我有一个具有2种不同数据结构的程序。信号量aaa级;列表bbb;
要在信号量上使用函数,我必须执行aaa.P();但在List中,我必须执行List->append(object);
我不太明白为什么Semaphore使用。p()而List使用->append()当信号量只是一个包含整数和列表的数据结构时
在使用对象本身或对象的引用访问成员时使用.
操作符
struct Foo
{
void bar() {}
};
Foo foo;
Foo& fooref = foo;
foo.bar();
fooref.bar();
当通过指向对象的指针访问成员时,使用->
操作符。继续上面的例子
Foo *fooptr = &foo;
fooptr->bar();
(*fooptr).bar(); // same as preceding line
表面:
a.b
用于访问对象a
的成员b
。
如果a
是指针类型,则a->b
被定义为与(*a).b
等价。
更多信息:
.
不能重载,但->
可以重载类(非指针类型)。->
操作符的返回值是应用->
操作符直到达到指针类型的结果。
注意,这是不可能的与解引用后的成员访问操作序列(试试看),即使 *
(解引用)操作符是可重载的。这是因为你需要"循环"在编译时计算->
的返回类型的结果,这是不可能手动完成的。这对于创建一个对象的代理很有用,它的行为就像指向对象的指针。
在Foo.Bar()
中,Foo
是具有Bar()
的类的对象。
在Foo->Bar()
中,Foo
是一个指针,指向具有Bar()
的对象。
问题不在于哪个类使用哪个操作符,而在于根据上下文使用哪个操作符。
.
表示访问对象中的项(对于data 和函数)。->
是相同的,但它使用指针指向对象。
struct abc { int xyz; } a;
struct abc *pointer_to_a = &a;
a.xyz = 271828; // manipulates the object directly.
pointer_to_a->xyz = 314159; // manipulates the object through a pointer.
除了别人说的,foo->bar()
和(*foo).bar()
是完全一样的。这只是一个简写和方便的符号。除非->
操作符为foo
重载。
就您最初的问题而言,造成差异的原因是Semaphore是类类型,而List是指针类型。这是关于你的特定程序的事实,而不是关于语言的事实。最有可能的是,有一些类型使得程序的这种结构特性不是很明显。
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 使用std::函数映射对象方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 初始化具有非默认构造函数的std::数组项的更好方法
- 如何制作一个将函数作为参数的类方法
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 获取从C++中同一类中的构造函数调用的方法返回的值
- C++ - 类方法函数指针unordered_map的初始化器列表
- 如何从具有多个对象/字段的类中调用方法函数
- 如何以这种方式访问另一个文件的方法/函数
- Vim 转到标准库方法/函数定义
- 在方法/函数中使用"static const std::string"还是只使用"cons
- 我可以将这两种方法/函数合二为一吗?
- 为什么我不能添加到方法/函数外部的 ostringstream
- 如何在调用方法函数中将列表、向量或数组作为参数传递
- 如何专门化模板化类,以采用不带参数的方法函数类型
- 类方法/函数中的指针
- 修改参数和/或返回新实例的方法/函数的命名约定
- 在Lua中跟踪变量以进行读访问,以启动用户定义的c++方法/函数
- 调试可视化工具在预览中使用成员方法/函数调用