gpt4 book ai didi

c - 在顶层理解 "' const',这可能会在不提高 const 正确性的情况下降低代码可读性”

转载 作者:行者123 更新时间:2023-12-04 12:32:59 25 4
gpt4 key购买 nike

请考虑下面的代码,特别是注意 get_length返回 const size_t .

#include <stdio.h>

const size_t get_length(void)
{
return 123;
}

void foo(void)
{
size_t length = get_length();
length++;

printf("Length #1 is %zu\n", length);
}

void bar(void)
{
// Still 123 because length was copied from get_length
// (copy ellision notwithstanding, which is not the point here)
size_t length = get_length();

printf("Length #2 is %zu\n", length);
}

int main(void) {
foo();
bar();
}
输出:
Length #1 is 124
Length #2 is 123
我从 clang-tidy 收到以下警告:
Clang-Tidy: Return type 'const size_t' (aka 'const unsigned long')
is 'const'-qualified at the top level,
which may reduce code readability without improving const correctness
此消息有两个关于返回类型的部分:
  • 常量正确性没有提高
  • 代码可读性降低

  • 我理解第一部分,就像在 foo 和 bar 中一样,因为调用者不需要将他们的局部变量指定为 const,最终 const 的正确性没有提高,
    即没有什么可以阻止调用者忽略被调用者返回一个 const 对象的事实。
    但我不确定“代码可读性降低”是什么意思——这仅仅是因为它可能会给一些人错误的期望,即永远不会修改返回类型?或者还有什么其他的东西只有在更复杂的返回类型才开始有意义?
    我问是因为我不认为这里的可读性会降低,我只是不确定警告背后的意图是什么。谢谢。

    最佳答案

    您可以使用 const那里,但 Clang-Tidy 将其标记为无效也是正确的。
    Should useless type qualifiers on return types be used, for clarity?下的相关问答, Benefits of using “const” with scalar type?覆盖部分为什么const在这种情况下是无效的。
    关于为什么“代码可读性降低”的问题的另一部分,那是因为一个多余的const qualifier 可能会分散核心事实的注意力,即 const'ness 不会通过值分配进行。例如,它可以诱使客户端代码错误地认为返回值必须使用 const以及例如const size_t val = get_length();正如发布的代码所示,这是不正确的。
    类似的警告也适用于论证。假设返回值是 const size_t get_length();总是传递给另一个函数 baz(get_length()); . baz的论据不需要(并且可以说不应该)声明为 const size_t但只是简单 size_tvoid baz(size_t); .

    关于c - 在顶层理解 "' const',这可能会在不提高 const 正确性的情况下降低代码可读性”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63972019/

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