C++ 在下面的示例中,structname和function是如何工作的?

C++ 在下面的示例中,structname和function是如何工作的?,c++,C++,我不理解上述示例的工作原理,这与&b=a相同吗? e2的值是如何传递给&fun的?注意:这是一个相当复杂的编码风格的例子 main的第一行是函数fun的前向声明,它返回对emp对象的引用。所以表达式fun被视为一个glvalue,它可以位于赋值的左侧,也可以是任何其他需要左值的操作的目标 fun返回对e1的引用,因此赋值在语义上等同于e1=e2;前面是将e1成员的值序列化为cout的副作用,这是有趣状态的定义。注意:这是一个相当复杂的编码风格的示例 main的第一行是函数fun的前向声明,它返回

我不理解上述示例的工作原理,这与&b=a相同吗?
e2的值是如何传递给&fun的?

注意:这是一个相当复杂的编码风格的例子

main的第一行是函数fun的前向声明,它返回对emp对象的引用。所以表达式fun被视为一个glvalue,它可以位于赋值的左侧,也可以是任何其他需要左值的操作的目标


fun返回对e1的引用,因此赋值在语义上等同于e1=e2;前面是将e1成员的值序列化为cout的副作用,这是有趣状态的定义。

注意:这是一个相当复杂的编码风格的示例

main的第一行是函数fun的前向声明,它返回对emp对象的引用。所以表达式fun被视为一个glvalue,它可以位于赋值的左侧,也可以是任何其他需要左值的操作的目标


fun返回对e1的引用,因此赋值在语义上等同于e1=e2;前面是将e1成员的值序列化到cout的副作用,这是fun状态的定义。

您的程序格式错误,不应编译:1。main必须始终具有返回类型,并且必须是int 2。cout和endl不是从std命名空间导入的。您需要编写std::cout和std::endl,或者使用std::cout导入它们;并使用std::endl。撇开形式不良不谈:我觉得在main而不是全局范围内向前声明函数是非常糟糕的风格。使用全局变量也是不好的风格,名称最好是std::string类型。emp&fun是一个不带参数并返回对emp实例的引用的函数。参考文献的解释请参见。如果这还不能回答您的问题,请具体说明您到底对什么感到困惑;如果您使用std::,来限定所有用途,则不需要。把它放在任何include语句之前也是不好的风格。它可能会导致不希望导入std的标题出现名称查找问题。顺便说一句,虽然main必须具有返回类型int,但它不需要返回语句。如果未给定,返回值将默认为0。这是一个特殊的规则,只适用于主要的形状不规则的情况。我直接抄袭了讲师给我的代码。他们就是这么教的,所以我必须站在stackoverflow上,以防有任何疑问。我已经编辑了代码。排除main中函数的声明,并且不使用std::string作为名称,您能准确地告诉我main函数中发生了什么吗?@walnut Edit:thanksy您的程序格式不正确,不应编译:1。main必须始终具有返回类型,并且必须是int 2。cout和endl不是从std命名空间导入的。您需要编写std::cout和std::endl,或者使用std::cout导入它们;并使用std::endl。撇开形式不良不谈:我觉得在main而不是全局范围内向前声明函数是非常糟糕的风格。使用全局变量也是不好的风格,名称最好是std::string类型。emp&fun是一个不带参数并返回对emp实例的引用的函数。参考文献的解释请参见。如果这还不能回答您的问题,请具体说明您到底对什么感到困惑;如果您使用std::,来限定所有用途,则不需要。把它放在任何include语句之前也是不好的风格。它可能会导致不希望导入std的标题出现名称查找问题。顺便说一句,虽然main必须具有返回类型int,但它不需要返回语句。如果未给定,返回值将默认为0。这是一个特殊的规则,只适用于主要的形状不规则的情况。我直接抄袭了讲师给我的代码。他们就是这么教的,所以我必须站在stackoverflow上,以防有任何疑问。我已经编辑了代码。排除main中函数的声明,并且不使用std::string作为名称,您能准确地告诉我main函数中发生了什么吗?@walnut Edit:谢谢
#include<iostream>
struct emp
{
    char name[20];
    int age;
    float sal;
};
emp e1={"Amol",21,2345.00};
emp e2={"Ajay",23,4500.75};
int main()
{
     emp &fun();
     fun()=e2;
     std::cout<<std::endl<<e1.name<<" "<<e1.age<<" "<<e1.sal<<std::endl;
     return 0;
}
emp &fun()
{
     std::cout<<std::endl<<e1.name<<" "<<e1.age<<" "<<e1.sal<<std::endl;
     return e1;
}