c/c++拷贝构造函数和关键字explicit】的更多相关文章

c/c++拷贝构造函数和关键字explicit 关键字explicit 修饰构造方法的关键字,加上了,就告诉编译器,不可以隐式初始化对象:不加就可以隐式初始化对象: 下面的代码是可以正常编译执行的,但是加了关键字explicit,编译就会错我,因为Test t = 100;是隐式初始化对象,但是如果加上强制类型转换后,就不会有错误了. 强制类型转换:Test t = (Test)100; class Test{ public: Test(int d):data(d){//explicit cou…
1:String类型 #include <iostream> using namespace std; int main() { //初始化方法 string s1 = "hello";//默认构造方法 string s2(s1);//将s2初始化为s1的一个副本 string s3("value");//将s3初始化为字符串的副本 ,'x');//将字符串初始化为字符x的10个副本 cout << s1 << "\t&…
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. explicit使用注意事项: explicit 关键字只能用于类内部的构造函数声明上. explicit 关键字作用于单个参数的构造函数. 隐式转换:直接将一种类型赋值给另外一个类型: 例如:string strType = "123"; object objType=strType;//,隐式转换, 显示转换:数据先进行类型转换再进行赋值, 例如…
C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色. 1 是个构造器 ,2 是个默认且隐含的类型转换操作符. 所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象. 这样看起来好象很酷, 很方便. 但在某些情况下(见下面权威的例子), 却违背了我们(程序员)的本意. 这时候就要在这个构造器前面加上explicit修饰,…
最近在复习QT,准备做项目了,QT Creator 默认生成的代码 explicit Dialog(QWidget *parent = 0)中,有这么一个关键字explicit,用来修饰构造函数.以前在Windows下写程序的时候,基本上没有碰到这个关键字,那么这个关键字是做什么用的呢? 关键字 explicit 可以禁止“单参数构造函数”被用于自动类型转换,主要用于 "修饰 "构造函数. 指明构造函数只能显示使用,目的是为了防止不必要的隐式转化. 光看这一句似乎不太容易明白,下面,举…
我们知道拷贝构造函数有两种“默默”的方式被调用 1. 想函数传入 值参数 2. 函数返回 值类型 今天我们讨论函数返回值类型的情况. 得到结论是 1. 当对象有拷贝构造函数(系统为我们生成.或者我们自己写拷贝构造函数)可以被隐式调用时,函数返回时会使用拷贝构造函数. 2. 当对象的拷贝构造函数声明成为explicit(不能被隐式调用时),函数返回时会使用move构造函数. 先看开始的代码. #include <iostream> #include <memory> using na…
原文地址:https://blog.csdn.net/shine_journey/article/details/53081523 1.在C++编码过程中,类的创建十分频繁. 简单的功能,当然不用考虑太多,但是从进一步深刻理解C++的内涵,类的结构和用法,编写更好的代码的角度去考虑,我们就需要用到标题所提到的这些内容. 2.先上代码 // testSingleMode.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <io…
 1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.另外一种初始化的方式是直接在构造方法里面实现初始化. 案比例如以下: #include<iostream> //假设声明已经定义.边不会生成 class classA { private: int a; int b; public: //拷贝构造的规则,有两种方式实现初始化 //1.一个是通过在后面:a(x),b(y)的方式实现初始化 //2.另外一种初始化的…
class Complex { public: //拷贝构造函数1 Complex(const Complex &c); //拷贝构造函数2 Complex(Complex &c); private: double m_real; double m_imag; } 上面例子中拷贝构造函数1才是系统默认的拷贝构造函数,在自己写的代码中这两个拷贝构造函数都没有什么问题,但是如果用于stl模板参数时,第二个拷贝构造函数往往会出现一些莫名其妙的错误,为了谨慎起见,以后拷贝构造函数的参数都用cons…
class TestChild { public: TestChild() { x=; y=; printf("TestChild: Constructor be called!\n"); } ~TestChild(){} TestChild(const TestChild& tc) { x=tc.x; y=tc.y; printf("TestChild: Copy Constructor called!//因为写在了Test(拷贝)构造函数的初始化列表里\n&quo…