Cha*_*via 40

它是通过指针访问对象的成员函数或成员变量,而不是常规变量或引用.

例如:使用常规变量或引用,您可以使用.运算符来访问成员函数或成员变量.

std::string s = "abc";
std::cout << s.length() << std::endl;
Run Code Online (Sandbox Code Playgroud)

但是如果你正在使用指针,你需要使用->运算符:

std::string* s = new std::string("abc");
std::cout << s->length() << std::endl;
Run Code Online (Sandbox Code Playgroud)

它也可以重载以执行特定对象类型的特定功能.像shared_ptr和的智能指针unique_ptr,以及STL容器迭代器,重载此运算符以模仿本机指针语义.

例如:

std::map<int, int>::iterator it = mymap.begin(), end = mymap.end();
for (; it != end; ++it)
    std::cout << it->first << std::endl;
Run Code Online (Sandbox Code Playgroud)


J-1*_*DiZ 38

a->b手段(*a).b.

如果a是一个指针, a->b是成员b,其中a指向.

a也可以是像对象一样的指针(就像一个vector<bool>存根)覆盖运算符.

(如果你不知道指针是什么,你有另一个问题)

  • 很遗憾,这有很多选票,因为超载运营商是常见的,也是一个重要的答案. (3认同)
  • 我不知道(*a).b的含义. (3认同)
  • @Steve:任何重载`a.operator - >()`与`&*a`不同的人都是邪恶的. (3认同)

Pau*_*lik 20

  1. 适用于(a)所有指针类型的访问运算符,(b)显式超载此运算符的所有类型
  2. 本地lambda表达式的返回类型的介绍人:

    std::vector<MyType> seq;
    // fill with instances...  
    std::sort(seq.begin(), seq.end(),
                [] (const MyType& a, const MyType& b) -> bool {
                    return a.Content < b.Content;
                });
    
    Run Code Online (Sandbox Code Playgroud)
  3. 引入一个尾随返回类型的函数结合重新发明auto:

    struct MyType {
        // declares a member function returning std::string
        auto foo(int) -> std::string;
    };
    
    Run Code Online (Sandbox Code Playgroud)

  • 返回类型为+1. (3认同)

Chr*_*ard 5

x-> y可以表示2件事.如果x是指针,则表示x指向的对象的成员y.如果x是一个运算符 - >()重载的对象,则表示x.operator - >().