鱼C论坛

 找回密码
 立即注册
查看: 1440|回复: 4

[已解决]C++相关语句问题

[复制链接]
发表于 2019-5-20 09:33:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小白一枚,正在自学C++,望各位海涵。
#include "iostream"
using namespace std;
class A
{
public:
    int v;
    A(int n)
    {
        v=n;
    };
    A(const A&a)//请问这个语句里面的const A&a 是什么意思呢?
    {
        v=a.v;
        cout<<"copy constructor called";
    }
};
A Func()//请问这个语句是类的成员函数吗?跟我学的不太一样
{
    A b(4);
    return b;
}
int main()
{
    cout<<Func().v<<'\n';//里面的Func().v是什么意思鸭,类的成员函数创建对象???蒙圈
    return 0;
}
我不明白的都用红色标记了,有木有大佬来救救我~~~
最佳答案
2019-5-20 19:26:46
本帖最后由 Croper 于 2019-5-20 19:28 编辑

一、“const A&”中,A&是传递引用。你可以理解为按址传递。因为这是复制构造函数,你不可能进行按值传递(否则就会出现递归调用)。所以必须传递引用。而const是向编译器承诺不会更改a,这样,编译器才肯让你在参数中使用一些不可更改的值,如右值,如常量值。
二、不是,函数的返回值类型为A,
三、既然返回值类型为A,那就是返回值.v
四、理论上应该是输出“
copy constructor called4”、
同时这个复制构造函数发生在函数返回时,会把返回的值“拷贝”到一个临时变量中,一般这个临时变量称作“将亡值”。这个"拷贝"就是调用复制构造函数进行拷贝。
但是几乎所有编译器都会进行代码的优化,所以考虑是编译器省掉了这个复制的步骤。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-20 09:51:04 | 显示全部楼层
另外输出问题
理论上代码输出
4
copy constructor called

为什么仅仅输出
4

我用的是mac的Xcode编译器。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 09:54:46 | 显示全部楼层
1、A(const A&) 这是拷贝构造函数;
2、Func不是A的成员函数,只是返回值是A的类型;
3、通过func返回的A的类型可以调用v的成员变量,因为v是public的;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 09:57:53 | 显示全部楼层
DreamNext、初墨 发表于 2019-5-20 09:51
另外输出问题
理论上代码输出
4

可能是编译器的问题:输出顺序应该是copy constructor called,然后接着输出4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 19:26:46 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Croper 于 2019-5-20 19:28 编辑

一、“const A&”中,A&是传递引用。你可以理解为按址传递。因为这是复制构造函数,你不可能进行按值传递(否则就会出现递归调用)。所以必须传递引用。而const是向编译器承诺不会更改a,这样,编译器才肯让你在参数中使用一些不可更改的值,如右值,如常量值。
二、不是,函数的返回值类型为A,
三、既然返回值类型为A,那就是返回值.v
四、理论上应该是输出“
copy constructor called4”、
同时这个复制构造函数发生在函数返回时,会把返回的值“拷贝”到一个临时变量中,一般这个临时变量称作“将亡值”。这个"拷贝"就是调用复制构造函数进行拷贝。
但是几乎所有编译器都会进行代码的优化,所以考虑是编译器省掉了这个复制的步骤。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 19:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表