将文字转换为左值

时间:2018-04-29 18:48:19

标签: c++ types

在C中,有一个compound literal的概念,它可用于获取任何文字并使其可寻址。例如:

int* p = &(int){0};

C ++中不存在复合文字。 C ++中是否有另一个可以将文字转换为左值的结构?例如:

// Something semantically equivalent to this, but without the need of a declaration
int n = 0;
int* p = &n;

编辑:

有一个函数或类型来创建解决方案很好,只要只需要一个内联语句来方便它的使用。例如,int* p = new int(0);每个使用实例需要两行:使用它的一行,以及删除分配的范围末尾的一行。

解决方案必须在标准C ++中可行;没有扩展。

1 个答案:

答案 0 :(得分:2)

您可以定义

template<class T>
T& lvalue_cast(T &&t) {return t;}

接受文字(除其他外)。临时lasts直到完整表达式的结尾,从词汇上包含其创建(大概materialization来绑定lvalue_cast的引用。显然,将其使用限制在那个时间间隔取决于你。