gpt4 book ai didi

c++ - 数组作为右值在单行上与 C++2003 一起使用?

转载 作者:行者123 更新时间:2023-11-30 00:40:22 26 4
gpt4 key购买 nike

我正在解析一些文本,如果我可以使用数组作为右值而不是在它们自己的行上定义它,它会让我的生活更轻松。我已经这样做了

 int a[]={1,2,3}; //its own line. Do not want

 func([]()->int*{static int a[]={1,2,3}; return a; }()); //It compiles but untested. It doesn't compile with 2003

我试过了

 func(int []={1,2,3}); //but got a compile error bc this is simply illegal

我可以在行尾添加其他内容,但不能在行前添加。你们有什么想法吗?

最佳答案

func([]()->int*{int a[]={1,2,3}; return a; }()); //works well on C++0x.

我觉得评论效果很好很有趣。我不是 lambda 律师,但我相信上面的代码返回一个指向局部变量的指针,这是未定义的行为,所以即使编译成功也不意味着它是正确的。

至于幕后发生的事情,我的理解是编译器将 lambda 转换为仿函数的方式类似于(请注意,这是一种简化,考虑到没有捕获,并且确切的 lambda:

struct __lambda {
// no captures: no constructor needed, no member objects needed
int* operator()() { // returns int*, no arguments

int a[] = { 1, 2, 3 }; // auto variable
return a; // return &a[0], address of a local object
}
};

关于c++ - 数组作为右值在单行上与 C++2003 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6252909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com