当结构在C++中也被引用时,它是否可以返回其成员之一?
Is it possible for a struct to return one of its members when it is referred too in C++?
很抱歉这个问题很尴尬。
我想知道 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
具有其成员a
的值,你可以创建一个隐式转换:
struct fooStruct
{
int a;
int b;
operator int() { return a; }
}
但是,编译器在任何时候可以进行的隐式转换次数都有限制(这可能有点痛苦(,并且隐式转换可能会导致类用户不希望的行为。一般来说,你应该避免这种情况,而只是写bar.a
。它更清楚了。
相关文章:
- 函数作为模板参数,是否对返回类型强制约束
- lock_guard是否保护返回值
- 检查函数返回类型是否与STL容器类型值相同
- 将错误返回给调用方而不是立即在 C++ 中抛出错误是否是一种好的做法
- 返回指向对象的指针的函数调用是否为 prvalue?
- 是否所有C++运算符都返回一些内容
- 如果返回 -1,时间() 的参数是否被修改?
- 是否可以在 QAbstractItemModel 中返回正数行数和零列数?
- 当返回类型声明为 ListNode 时,我们是否可以返回 false<T>*
- 将 std::map::emplace 与返回 shared_ptr 的函数一起使用是否正确?
- C++方法是否可以根据传递给构造函数的参数具有不同的返回类型?
- 插入向量时,使用lambda的返回而不是函数的返回是否有意义?
- 默认情况下,返回是否使用移动或复制语义
- 在所有std::futures完成之前从函数返回是否安全
- 将成员函数指针强制转换为另一个类中的一个然后再返回是否安全
- 临时对象的成员函数的左值引用返回是否为悬空引用
- 通过引用成员变量EVER返回是否可接受
- 本例中引用静态变量的引用返回是否安全?
- 从 typeid 成功返回是否保证dynamic_cast不会引发异常?
- new 运算符 - 在C++中测试"new"的返回是否有用?