【问题标题】:2 quick questions about passing by const pointer/const reference关于通过 const 指针/const 引用传递的 2 个快速问题
【发布时间】:2010-02-18 03:12:51
【问题描述】:

1) 有人可以解释以下内容吗?

void OnCreate(HWND hWnd, const LPCREATESTRUCT lpCreateStruct)
{
   lpCreateStruct->x = 2; // this compiles
}

void OnCreate(HWND hWnd, const CREATESTRUCT * lpCreateStruct)
{
   lpCreateStruct->x = 2; // this does not compile
}

2) 是通过指针传递还是通过引用传递更快?还是一样?

【问题讨论】:

  • 我可以编译,因为我指定了 const,并试图在函数中更改它
  • gcc 为您的 const my_structure* 函数提供了一个错误...您使用的是什么编译器?有什么特殊设置吗?
  • 我发布的代码实际上并没有编译(这正是我想要的)。在这里,我用我的程序中实际存在的代码编辑了我的第一篇文章。有什么想法吗?
  • 一般来说,你应该分别发布每个问题。

标签: c++ reference pointers constants


【解决方案1】:

const LPCREATESTRUCT 扩展为 CREATESTRUCT* const,即指向非常量结构的常量指针,而 const CREATESTRUCT*是指向常量结构的非常量指针,所以编译器是对的。

【讨论】:

    【解决方案2】:

    为什么下面将 2 分配给 x 什么时候是常量?

    不应该,任何符合标准的编译器都会出错,因为ms 指向const my_structure

    编辑:

    对于您更新的案例,这是 typedef 如何工作的问题:

    typedef T* TPtr;
    
    void f(const TPtr);
    void g(T* const);
    void h(const T*);
    

    f()g() 是等价的,它们将 const 指针指向 T,而 h() 指针指向 const T

    【讨论】:

    • 是的,我测试了自己。我发布的代码实际上没有编译,所以我用自己的代码编辑了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 2021-06-04
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    相关资源
    最近更新 更多