将文字转换为左值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将文字转换为左值相关的知识,希望对你有一定的参考价值。

在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 ++中可行;没有扩展。

答案

你可以定义

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

它接受文字(除其他外)。临时lasts直到完整表达的结尾词汇包含其创建(大概是materialization绑定lvalue_cast的参考)。显然,将其使用限制在该间隔取决于您。

以上是关于将文字转换为左值的主要内容,如果未能解决你的问题,请参考以下文章

“非常量引用的初始值必须为左值“及“匿名对象“

error C2106: “=”: 左操作数必须为左值

非常量引用的初始值必须为左值的问题

左值和右值

左值和右值的区别

C++ C++11新特性--右值引用