Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将文字转换为左值_C++_Types - Fatal编程技术网

C++ 将文字转换为左值

C++ 将文字转换为左值,c++,types,C++,Types,在C语言中,有一个a的概念,它可以用来获取任何文本并使其可寻址。例如: int* p = &(int){0}; 复合文字在C++中不存在。C++中还有其他的构造可以将文字转换成LValk吗?例如: // Something semantically equivalent to this, but without the need of a declaration int n = 0; int* p = &n; 编辑: 有一个函数或类型来创建解决方案是可以的,只要只需要一个内

在C语言中,有一个a的概念,它可以用来获取任何文本并使其可寻址。例如:

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

复合文字在C++中不存在。C++中还有其他的构造可以将文字转换成LValk吗?例如:

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

编辑:

有一个函数或类型来创建解决方案是可以的,只要只需要一个内联语句就可以方便地使用它。例如,
int*p=newint(0)要求每个使用实例有两行:一行在使用它的地方,一行在作用域的末尾删除分配

解决方案必须在标准C++中可行;没有分机

您可以定义

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

它接受文字(除其他外)。在包含其创建的完整表达式结束之前的临时表达式(可能是为了绑定
lvalue\u cast
的引用)。显然,将其使用限制在该时间间隔取决于您。

您有什么好的理由要这样做吗?在使用OpenGL时,我希望通过指针传递许多文本。我可以进行声明,但是我可以使用并忘记的内联值会更少膨胀。额外的间接层可能不会有什么坏处。你可以为此编写包装;但是看看是否要使用非标准扩展
int*a=newint(3)类似的内容?@artur99这增加了我的问题,因为我仍然需要两行代码(语句+作用域末尾的删除),但现在必须确保我没有泄漏内存。这可能值得扩展终身影响。在C语言中,当封闭块结束时,函数内部的复合文字消失;我相信这会很快消失。@user2357112:当然——我在评论中查看了所需的生存期,但我现在也在这里提到了它。