zoukankan      html  css  js  c++  java
  • Interview_C++_day4

    隐式类型转换

    1. 表达式中,低精度类型向高精度类型发生转换。
    2. 条件语句中,非布尔类型向布尔类型发生转换。
    3. 初始化语句中,初始值向变量类型发生转换。
    4. 赋值语句中,右侧运算对象向左侧运算对象发生转换。
    5. 可以用 单个形参 来调用的构造函数定义了从 形参类型 到 该类类型 的一个隐式转换。注意 单个形参 并不是只有一个形参,可以有多个形参,但其他形参要有默认实参。
    #include<iostream>
    using namespace std;
    
    class Node {
    	public :
    		string s1;
    		int a;
    		Node(string s, int val=0) : s1(s), a(val) {
    		}
    		bool ok(Node other) const {
    			return s1 == other.s1;
    		}
    };
    
    int main() {
    	Node x("xxxxx");
    	cout << x.ok(string("xxxxx")) << endl;  // 隐式
    	cout << x.ok(Node("xxxxx")) << endl;    // 显式
    	return 0;
    }
    

    extern "C"

    (C)(C)++ 混编的程序中,由于 (C) 不存在重载机制,无法区分两个同名函数,于是引出 extern "C" 语句块,告诉 (C)++ 编辑器这段代码按 (C) 标准编译,尽可能的保存 (C)(C)++ 的兼容性。

    函数调用过程

    每一个函数调用都分配一个函数栈,先将返回地址入栈,在将当前函数的栈指针入栈,然后在栈内执行函数。

    (C)++ 函数返回值和返回引用的区别

    1. 函数返回值时,生成一个临时变量,返回该临时变量,然后在调用处把该临时变量赋值给左侧变量。
    2. 函数返回引用时,返回和接收应是 int& 类型,不能返回局部变量的引用。不生成临时变量,直接返回该引用。
    #include<iostream>
    using namespace std;
    
    int x, y;
    
    int get1() {
    	cout << "get1 中 x 的地址" << &x << endl;
    	return x;
    }
    
    int& get2() {
    	cout << "get2 中 y 的地址" << &y << endl;
    	return y;
    }
    
    int main() {
    	int x = get1();
    	cout << "main 中 x 的地址" << &x << endl;
    	int& y = get2();
    	cout << "main 中 y 的地址" << &y << endl;	
    	return 0;
    }
    /*
    get1 中 x 的地址0x4c600c
    main 中 x 的地址0x6efef8
    get2 中 y 的地址0x4c6010
    main 中 y 的地址0x4c6010
    */
    

    C++中拷贝赋值函数的形参能否进行值传递?

    不能,会造成无限循环。

    #include<iostream>
    using namespace std;
    
    class Node {
    	public:
    		int x;
    		Node(int a) : x(a) {
    		}
    		Node(Node& a){	// 方法1,正确
    			x = a.x;
    		}
    		Node(Node a) {	// 方法2,错误,无法编译通过
    			x = a.x;
    		}
    };
    
    int main() {
    	Node x(10);
    	Node y(x);
    	return 0;
    }
    

    如果使用方法1,在传入 (x) 的时候,构造函数处 (a) 是引用,可以正常赋值。
    如果使用方法2,在传入 (x) 的时候,构造函数处 (a) 是形参,(a) 需要再次调用的 (a) 本身的构造函数,往下也是同样的道理,将造成无限构造的处境。

  • 相关阅读:
    phoneGap
    backbonejs使用
    优化后的光标插件
    选择文本,范围
    js最佳继承范型
    深入理解事件捕获冒泡
    keyCode,charCode,which
    与IE奋战的血泪史
    【程序员的自我修养】如何使用IRC
    【程序员的自我修养】写给新手程序员的一封信
  • 原文地址:https://www.cnblogs.com/Jiaaaaaaaqi/p/12292041.html
Copyright © 2011-2022 走看看