C++ 将文字转换为左值
在C语言中,有一个a的概念,它可以用来获取任何文本并使其可寻址。例如: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; 编辑: 有一个函数或类型来创建解决方案是可以的,只要只需要一个内
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:当然——我在评论中查看了所需的生存期,但我现在也在这里提到了它。