我想通过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&;