c – 将const添加到引用

我想通过typedef const A B;将const添加到引用类型.

不知怎的,它不起作用.这在c中不可能吗?

测试:

#include <type_traits>
typedef int& A;
typedef const A B;  // <-- Add const
// typedef std::add_const<A>::type B;  // also doesn't work.
static_assert(std::is_const<typename std::remove_reference<
        B>::type>::value,"is const");
int main() {
    return 0;
}

编译错误

add2.cpp:5:1: error: static assertion Failed: is const
 static_assert(std::is_const<typename std::remove_reference<
 ^~~~~~~~~~~~~

解决方法

Somehow it doesn’t work. Is this not possible in c++?

不是你的方式. typedef不像预处理器宏那样工作.

typedef int& A;
typedef const A B;

不翻译成

typedef int& A;
typedef const int& B;

常数

typedef const A B;

适用于A,而不是A的int部分.由于引用在C中是不可变的,因此const A与类型点视图中的A相同.

您可以使用:

typedef int const& B;

如果你想从A派生它,你可以使用:

using B = typename std::remove_reference<A>::type const&;

如果您能够使用C 14或更高版本,则可以将其简化为:

using B = std::remove_reference_t<A> const&;

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...