gpt4 book ai didi

c++ - 当结构在 C++ 中也被引用时,是否有可能返回其成员之一?

转载 作者:行者123 更新时间:2023-11-27 22:32:33 25 4
gpt4 key购买 nike

抱歉这个尴尬的问题。

我想知道 C++ 中的结构是否有可能在调用它本身时提供其成员之一:

像这样:

struct fooStruct
{
int a;
int b;
}

//some stuff

fooStruct bar = {1, 2}

cout << bar << endl //prints 1 or a
cout << bar.b << endl //prints 2

我希望这样更清楚,谢谢您的回答!

最佳答案

我将首先解开您的一些术语,以使问题不那么含糊。如果其中任何一点不匹配,则这部分答案将不适用。

  • “给它的一个成员”:你希望能够命名对象 bar , 但结果更多关于对象的成员 a

  • “当它本身被调用时”:当它的名字被传递给一个流时(它不是一个函数!)

  • “当它也被引用时”:如上(在特定场景/上下文中引用它)

为此,您重载了operator<< 。这是一种告诉计算机您在调用 << 时希望发生什么的方法。带有一个流和一个 bar 类型的对象.该运算符的实现可以做任何您喜欢的事情,包括流式传输成员变量。

它可能看起来像这样:

std::ostream& operator<<(std::ostream& os, const fooStruct& bar)
{
os << bar.a;
return os;
}

当此运算符重载存在且在范围内时,std::cout << bar << std::endl;会按照您的要求去做。

如果不是或不是,该行将不会编译,因为计算机没有指令可以知道序列化 bar 的含义。 .

返回 os来自此类运营商的引用是常规的,并且允许链接。您可以在您的 C++ 书中阅读更多相关信息。


相反,如果您想允许任何 fooStruct被视为 int ,为此int拥有其成员的值(value)a ,您可以创建隐式转换:

struct fooStruct
{
int a;
int b;

operator int() { return a; }
}

但是,编译器在任何时候可以进行的隐式转换的数量是有限制的(can be a bit of a pain),并且隐式转换可能会导致您的类的用户不期望的行为。一般来说,你应该避免这种情况,只写 bar.a反而。清晰多了。

关于c++ - 当结构在 C++ 中也被引用时,是否有可能返回其成员之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59158698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com