c++ - 如何声明一个可以用作 "this"的 const 指针

标签 c++ constants

我有一个 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/

相关文章:

angular - 使用一些配置文件在 Angular 5 中完全外部常量

c++ - Qt 单个应用程序文件打开

c++ - 如何将 map 和 unordered_map 作为同一个对象来处理

c++ - 如何使用 IFileOperation 清空文件夹

javascript - 声明为常量的数组仍在 javascript 中被操作

php - 如何在 Mysqli 准备语句中使用 PHP 常量

c++ - 如何让 forkpty/execvp() 正确处理重定向和其他 bash-isms?

c++ - 字符串语句

javascript - 就声明而言,Javascript 中 for of 循环中的 let 和 const 之间没有区别吗?

perl - 如何在 Perl 的单独文件中定义常量?