| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 385 人关注过本帖, 1 人收藏
标题:求解惑,关于初始化!
只看楼主 加入收藏
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:5 
求解惑,关于初始化!
看书上说初始化分两种:直接初始化和复制初始化
int ival(1024);
int ival=1024;
这两种初始化有区别吗?如果有区别在哪?
各路大神,求解惑,谢谢哦
2013-01-12 09:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
没有区别
但如果是自定义类型,且不允许隐式构造,则是
type a = type(...)
等同于
type a(...)
2013-01-12 09:36
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
以下是引用rjsp在2013-1-12 09:36:10的发言:

没有区别
但如果是自定义类型,且不允许隐式构造,则是
type a = type(...)
等同于
type a(...)
兄台,能说的详细点吗,你知道的,我新手啊,求指教,求鞭笞。。。。

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-12 09:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:20 
回复 3楼 yaobao
不是我卖关子,而是这里面细节太多,我怕没讲清到时候被人骂。
若你不介意,我就随便说说自定义类型(内建类型太简单了)

  对于 type a = val; 而言
  首先要将val转化为type,这要看构造函数了,而且是看可以隐式构造的构造函数。从这一点上来看则 type a = val; 未必等同于 type a = type(val);
  接着是那个"="(这可不是赋值操作),它对应的拷贝构造函数,因此如果拷贝构造是非public的,它就会编译失败。
  我上面没有拷贝构造函数的内容,只说其是否可见,那是因为C++规定这里需要优化,也就是只是控制由拷贝构造函数决定,但做什么却和拷贝构造函数无关。

听得更糊涂了吧?所以我一开始不想细讲^_^。我写段代码给你吧
程序代码:
#include <iostream>
using namespace std;

struct foo
{
    foo( int val ) : val_(val)
    {
        cout << "foo(int)" << endl;
    }
    explicit foo( float f ) : val_(int(f))
    {
        cout << "foo(float)" << endl;
    }
//private:
    foo( const foo& obj ) : val_(obj.val_)
    {
        cout << "foo(foo)" << endl;
    }
    foo& operator=( const foo& obj )
    {
        cout << "=" << endl;
        return *this;
    }
private:
    int val_;
};

int main(void)
{
    foo a = 0;
    cout << "----------------" << endl;
    foo b = 0.0f;
    cout << "----------------" << endl;
    foo c = foo(0.0f);
    cout << "----------------" << endl;
    foo d = foo(0);
    cout << "----------------" << endl;

    return 0;
}
体会一下,为什么是这个输出结果
然后将拷贝构造函数设为private,再编译看看,想想为什么是这样
2013-01-12 10:59
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
回复 4楼 rjsp
真心不懂啊,还是一点点来吧,谢谢啊哥们

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-12 12:10
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
楼主这个应该说的是类的内容吧,声明一个类,如果你不显式声明够造函数(即默认构造函数、赋值函数、赋值函数、析构函数),
C++会隐式的为类构造这些函数,如声明一个类class Stack{},你不显式声明Stack的默认构造函数、赋值函数、赋值函数、析构函数,
(默认构造函数、赋值函数、赋值函数、析构函数这几个事只要你声明类,都会存在的成员函数),那么C++就会为你这个类
构造他们
你声明class Stack{}
就相当于声明了
classe Stack{
public:
Stack(){}                            //默认构造函数
Stack(const Stack& rhs) {}             //copy构造函数
Stack operator=(const Stack& rhs) {}   //copy assingnment操作符
~Stack(){}
};
希望对你有用
2013-01-14 21:12
快速回复:求解惑,关于初始化!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016842 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved