我有一个 XWin 父类来封装程序的“X 调用”。一次 我已经打开显示器了。我将指针传递给包含所有内容的 Xwin 类 X 相关指针(资源、显示等)和所有 X 调用 通过该类的指针。
我有单独的对象将句柄传递给 XWin 类,所以 他们可以通过包装类进行图形调用。
我正在尝试将指针声明为“const”
Meter::Meter(const XWin * parent,...): parent_(parent) {}
class Meter {...
Const XWin * parent_;...}
当我使用“parent_”调用父类时遇到问题...如:
parent_->setForeground(color);
(g++) 编译器告诉我
meter.h: In member function ‘void Meter::setForeground(uns)’:
meter.h:72:33: error: passing ‘const XWin’ as ‘this’ argument of \
‘void Xwin::setForeground(long unsigned int)’ discards qualifiers \
[-fpermissive]
{ parent_->setForeground(color); }
我如何告诉 g++,“没关系,调用的函数没有修改“this”?
我想使用 use 'const' 作为显而易见的声明,这个传递的指针在任何地方都没有改变。不确定将“const”放在哪里以指示指针未更改(并且没有将其应用于 指出,因为这可能会改变)。
这可能吗?
(我在看到第一个答案后尝试添加的一个无效示例 :-( )
注意——我在此处发布之前尝试的第一件事就是将 const 放在函数名称之后和参数列表之前,正如一个答案似乎所暗示的那样。不幸的是,这似乎将 object 声明为 const 以及 or 而不是指向该对象的指针。我通过以下方式发现了这一点:
xwin.h: In member function ‘void XWin::done(int) const’:
xwin.h:34:38: error: assignment of member ‘XWin::done_’ in \
read-only object
void done( int val ) const { done_ = val; } ;
这给了我一个提示,那个位置的 const 适用于函数,不一定适用于指针(即使它适用,我也不想声明对象常量——那将是“可疑的” ”充其量,调用一个方法来设置一个“常量对象”?它是指向我要声明常量的对象的指针,而不是对象。
最佳答案
C++ FAQ 在这里有答案http://www.parashift.com/c++-faq/const-ptr-vs-ptr-const.html .
您要的是常量指针,而不是指向常量的指针。
XWin * const parent;
使用指向常量的指针有很多有用的原因。拥有常量指针的理由并不多。
想一想您希望通过常量指针实现的目标。有人会关心吗?编译器可以进行优化吗?通常不会。
关于c++ - 如何声明一个可以用作 "this"的 const 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25232963/