Symbian源代码还原之四——const CCoeControl* CCoeControl::SearchParent(const CCoeControl* aParentToFind)

本文介绍了一个名为SearchParent的方法,该方法用于在一个给定的控件中查找其父级控件。如果找到直接拥有窗口的父控件,则返回该控件指针;若未找到,则返回空。此方法通过递归遍历当前控件及其所有上级控件来实现这一目标。
const CCoeControl* CCoeControl::SearchParent(const CCoeControl* aParentToFind) 
{
 if (NULL == aParentToFind)
 {
  return NULL;
 }
 CCoeControl* tmpCtrlPtr = aParentToFind;
 TInt count = 0x64;
 do 
 {
  if (ETrue == tmpCtrlPtr->OwnsWindow())
  {
   return tmpCtrlPtr;
  }
  tmpCtrlPtr = tmpCtrlPtr->Parent();
  count--; 
 } while (count);
 User::Invariant();
 return NULL;
}
### `const` 关键字在指针声明中的位置影响 当涉及到带有 `const` 的指针时,在 C/C++ 中,`const` 放置的位置决定了其修饰的对象不同。对于两种不同的声明方式: - **`const char* p`** 表明指针所指向的内容是常量字符数据,即不允许通过该指针修改它所指向的数据[^1]。 ```cpp const char* p = "hello"; // *p = 'H'; // 错误:尝试改变不可变字符串文字 ``` - **`char* const p`** 则表示这是一个指向字符类型的常量指针,意味着一旦初始化后就不能再更改此指针本身指向其他地址,但是可以通过这个指针来修改其所指向的内存内容。 ```cpp char str[] = "world"; char* const p = str; *p = 'W'; // 正确:可以修改str的第一个字符 // p = &anotherChar; // 错误:不能重新赋值给p新的地址 ``` 这两种形式的主要差异在于 `const` 所处的具体位置以及它们各自保护的是什么——是指针本身的不变性还是指针指向对象的不变性。 #### 示例代码展示两者的区别 为了更直观理解上述概念的区别,下面给出一段简单的例子来进行说明: ```cpp #include <iostream> using namespace std; int main() { const char* ptr1 = "immutable string"; // 指向常数数据的可变指针 cout << "*ptr1 before change: " << *ptr1 << endl; // *ptr1 = 'm'; // 编译错误,因为试图修改只读存储区 char mutableString[] = "mutable string"; char* const ptr2 = mutableString; // 可变数据的常量指针 *ptr2 = 'M'; cout << "*ptr2 after change: " << mutableString << endl; } ``` 这段程序展示了如何定义并使用这两种不同特性的指针变量,并演示了各自的约束条件。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值