首页 > 代码库 > c++ data语意学
c++ data语意学
case1 :数据成员的绑定
extern float x; class Point3d { public: point3d(); //问题:被传回和被设定的x是哪一个x呢? float X() const { return x; } private: float x, y, z;//Point3d::X()将返回内部的x。 };
在早期(2.0之前)C++的编译器上,将会指向global x object, 导致C++的两种防御性程序设计风格:
1、把所有的data members放在class 声明起头处,以确保正确的绑定
2、把所有的inline functions, 不管大小都放在class声明之外
对于 member function的argument list并不为真(同以上情况相反)。
-----------------------------------------------------------------
对于下面两个代码,第一个错误的,第二个是正确的
typedef int length; class Point3d { public: //length 将被决议为global //_val将被决议为Point3d::_val void mumbel(length val) { _val = val; } length mumble() { return _val; } private: //导致 _val = val; return _val;不合法 typedef float length; length _val; };
#include<stdio.h> #include<iostream> #include<algorithm> using namespace std; typedef int length; class base { public: //length 将被决议为global //_val将被决议为Point3d::_val void mumbel(length val) { _val = val; } length mumble() { return _val; } private: //导致 _val = val; return _val;不合法 typedef float length; length _val; }; int main(){ base ptr; ptr.mumbel(5); cout<<ptr.mumble()<<endl;; return 0; }
预防性程序风格:请始终把“nested type 声明”放在class的起始处。
c++ data语意学
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。