gpt4 book ai didi

c++ - C++ 有 move 和删除语义吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:17 24 4
gpt4 key购买 nike

是否可以在 C++ 中创建一次性变量而无需使用大括号?

这是我想要实现的示例:

const float _phiTemp  = atan2(tan(cluster.beta), tan(cluster.alpha));
const float phi = HALF_PI - std::abs(HALF_PI - std::abs(_phiTemp));
// After running this code I want _phiTemp to be unaccessible, and the
// compiler to send an error if I ever try

这是我想要的一个又长又丑的实现:

const float phi = 0;
{
const float _phiTemp = atan2(tan(cluster.beta), tan(cluster.alpha));
float& phiRef = const_cast<float&> phi;
phiRef = HALF_PI - std::abs(HALF_PI - std::abs(std::move(_phiTemp)));
}
// _phiTemp is disposed and phi is a const, and safely used in the calculation
// through std::move()

我错过了什么吗? C++ 中没有“即时”变量处理吗?

最佳答案

冗长而丑陋的实现也是未定义的行为;对 phiRef 的写入是对定义为 const 的变量的写入。

您能做的最好的事情就是编写一个函数来计算 phi - 如果您想内联执行此操作,您可以编写一个 lambda:

const float phi = [&cluster]{
const float phiTemp = atan2(tan(cluster.beta), tan(cluster.alpha));
return HALF_PI - std::abs(HALF_PI - std::abs(phiTemp));
}();

...但它仍然很丑陋。我认为 C++ 不提供此功能。

关于c++ - C++ 有 move 和删除语义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40846590/

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