gpt4 book ai didi

c++ - C++中函数返回的值是右值吗?无法使用复制/move 构造函数初始化实例

转载 作者:行者123 更新时间:2023-11-28 00:23:43 27 4
gpt4 key购买 nike

<分区>

我试图用函数的返回值初始化一个实例。我预计它会调用 move 构造函数,但结果不是。好像返回值直接被实例t接管了。因为函数中的t和返回值是同一个地址。编译器是否优化了这种情况?

我的环境是Mac OS X mavericks,默认g++ -std=c++11

class T1 {
public:
T1() {
printf("T1::constructor\n");
t = new char[100];
}
T1(const T1 &another) {
printf("T1::copy_constructor\n");
}
T1(T1 &&another) {
printf("T1::move_constructor\n");
}
char *t;
};

T1 func() {
T1 t;
printf("add:%d\n", static_cast<void*>(&t));
return t;
}

void rref_test() {
T1 t = func();
T1 t2 = std::move(t);
printf("add:%d\n", static_cast<void*>(&t));
}


int main() {
rref_test();

return 0;
}

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