常量对象问题,如何保证一个常量指针只能赋值给常量对象?有类定义class MyClassA{public:MyClassA(OtherCla
常量对象问题,如何保证一个常量指针只能赋值给常量对象?
有类定义
class MyClassA
{
public:
MyClassA(OtherClass* obj);
}
//那么可以酱紫:
OtherClass* obj1;
MyClass myClass1(obj1);
//这是合法的
//还有这种写法
const OtherClass* obj2;
MyClass myClass1(obj2);
//但是怎么让这种写法不合法而必须写成这样子呢?
const MyClass myClass1(obj2);
class c c++
[解决办法]//还有这种写法
const OtherClass* obj2;
MyClass myClass1(obj2);
这种写法能通过编译?你试过吗?
const MyClass myClass1(obj2);这样的写法是没办法限制const的,不过可以用函数调用的方法,比如
MyClass getMyClass(OtherClass* obj2);
const MyClass getMyClass(const OtherClass* obj2);
这样的接口来限定是否const
[解决办法]这种写法本身就是不合法的,不能将const OtherClass* 转化为 OtherClass*
const OtherClass* obj2;
MyClass myClass1(obj2);
[解决办法]首先,这个本身就不合法,const不能传给非const
其次,纯靠c++语法应该做不到你的要求。
一般通过形参加不加const就可以达到保护目的,你连包含他的对象都要控制,这个太霸道了吧。
[解决办法]会不会你设计的有问题呢?换个思路呢。
[解决办法]不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
[解决办法]你说的是废话,运动是绝对的,静止相对性都是废话。
C++的常量是保证编译正确,不至于写出不好的代码的,但是你企图用“不好的实践”,来证明这些基础设置是不好的,是不完善的,本身就是个错误。
算了,说得太正直,你也不懂。
[解决办法]class PointerA
{
A *pa;
public:
explicit Pointer(A *a):pa(a){};
A& operator*() {return *pa};
A* operator->(){return pa;};
operator A*(){return pa;};
}
class Const_PinterA(
A *pa;
public:
explicit Pointer(const A *a):pa(a){};
const A& operator*()const {return *pa;};
const A* operator->()const {return pa;};
operator const A*()const {return pa;};
};
[解决办法]适当使用 但不依赖于 语法糖
[解决办法]赵老师说的是,改变内存中的代码段吗?
[解决办法]AdjustTokenPrivileges
VirtualProtectEx
WriteProcessMemory