Skip to content
败犬日报 2026-07-25

败犬日报 2026-07-25

停更了 3 个月,原因是败犬群和 C++ 切割。后面我打算随缘更新了。

1. 引用能做,指针做不了的事情

来自周刊群 jajuju。

一直都有“引用是指针的语法糖”的说法,言下之意就是引用能做的,指针一定能做。真的是这样吗?

这个提案讲了,constexpr 函数如果只取了参数的类型信息,那么就算传了变量也可以编译期计算。但是,只能接受引用,不能是指针。

该提案已进入 C++23。

于是我们可以完成下面的操作:

cpp
#include <cstddef>

template <typename T, size_t N>
constexpr size_t array_size(T (*)[N]) {
    return N;
}

template <typename T, size_t N>
constexpr size_t array_size(T (&)[N]) {
    return N;
}

void check(int const (*param)[3]) {
    // constexpr auto s = array_size(param);  // error: ‘param’ is not a constant expression
}

void check(int const (&param)[3]) {
    constexpr auto s = array_size(param);
}

int main() { return 0; }