gpt4 book ai didi

c++ - 什么时候从函数的参数化中省略 const 是安全的?

转载 作者:行者123 更新时间:2023-12-05 00:50:50 25 4
gpt4 key购买 nike

在我编写 C++ 函数时,我似乎比其他人使用了更多的 const 修饰符。

例如,我编写 Excel .xlsx 文件并为此使用 LibXL 库,而 documentation提到这样一个函数:

bool writeNum(int row, int col, double value, Format* format = 0)

我碰巧继承了这个函数,我的签名是这样的:

bool XLAPIENTRY writeNum(const int row, const int col, const double value, IFormatT<wchar_t> * format = 0);

注意行和列的 const int

问题:为 int 省略 const 是否安全? (很明显,对于指针,为指针省略 const 是危险的,但是做一些 int 的本地拷贝并不那么危险)。请注意,包含 writeNum 函数的原始 header 也没有提及 const-ing ints。为什么这里省略了 const 修饰符?

最佳答案

声明(与定义相反)中,参数上的顶级1 const 无效。可以说,它是函数的实现细节,不应该出现在声明中(它会增加困惑,但不会为调用者提供任何新信息)。

请注意 const int xint *const x是顶级常量,而 const int *const int &不是,所以后者不能有它的const删除。

定义中,您可以包含const如果它可以帮助您作为函数的实现者(所以您不会意外更改参数)。


1 “顶级常量”表示“实际上是常量”,而不是例如仅仅是一个指向 const 的指针。您可以通过 std::is_const_v 查看此属性.

例如:

  • std::is_const_v<const int> == true (const 整数)
  • std::is_const_v<const int *> == false (非 const 指向 const 整数的指针)
  • std::is_const_v<int *const> == true (const 指向非常量整数的指针)
  • std::is_const_v<const int **> == false (非常量指向非常量的指针,指向常量整数)
  • std::is_const_v<int *const *> == false (non-const 指向 const 的指针 指向非 const 整数的指针)
  • std::is_const_v<int **const> == true (const指向非常量的指针,指向非常量整数的指针)

关于c++ - 什么时候从函数的参数化中省略 const 是安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74094760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com