【问题标题】:Const Correctness - Const Pointer As Function Argument常量正确性 - 常量指针作为函数参数
【发布时间】:2011-10-24 18:53:13
【问题描述】:

考虑一个类似的函数

char* strcpy (char* destination, const char* source);

(address) source 处的给定值是 const,因为函数的作者想表明 source 的值不会被 strcpy 更改。指针本身不会被 strcpy 更改为。为什么不写

char* strcpy (char* destination, const char* const source);

非常感谢。

【问题讨论】:

    标签: c++ c


    【解决方案1】:

    指针本身是传值的,所以没有意义。

    【讨论】:

      【解决方案2】:

      也可以这样写,但无论如何都不会影响调用者。

      在第二种情况下,原型说指针本身不应该被修改,但是调用者的指针无论如何都不能被修改,因为它在调用函数时被复制(通过值传递)。

      使用const 标记按值传递的变量仅对函数的实现者有用,作为明确其意图的一种方式。

      【讨论】:

        【解决方案3】:

        如果您尝试实现这两个功能,您会发现它们实际上是相同的。此时的 const 修饰符仅对函数体有意义,因为无论如何参数都是按值传递的。

        error: function "strcpy" has already been defined
        char* strcpy (char* destination, const char* const source)
        

        【讨论】:

        • 如果我在将指针传递到目的地后将函数体内的源设置为 NULL 会发生什么?
        • 用作函数参数的本地副本source 将设置为NULL,而不是传递给它的参数。
        猜你喜欢
        • 2012-02-07
        • 1970-01-01
        • 2011-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-02
        相关资源
        最近更新 更多