在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 ++中可行;没有扩展。
答案 0 :(得分:2)
您可以定义
template<class T>
T& lvalue_cast(T &&t) {return t;}
接受文字(除其他外)。临时lasts直到完整表达式的结尾,从词汇上包含其创建(大概materialization来绑定lvalue_cast
的引用。显然,将其使用限制在那个时间间隔取决于你。