我知道下面写的代码是非法的
void doSomething(std::string *s){}
int main()
{
doSomething(&std::string("Hello World"));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
原因是我们不允许获取临时对象的地址.但我的问题是为什么?
让我们考虑以下代码
class empty{};
int main()
{
empty x = empty(); //most compilers would elide the temporary
return 0;
}
Run Code Online (Sandbox Code Playgroud)
公认的答案在这里提到
"通常编译器会将临时和副本构造为两个对象,它们位于内存的完全相同的位置,并避免复制."
根据声明,可以得出结论,临时存在于某个内存位置(因此可能已经采用了它),编译器决定通过在临时存在的同一位置创建就地对象来消除临时对象. .
这是否与临时地址不能采取的事实相矛盾?
我还想知道如何实现返回值优化.有人可以提供与RVO实施相关的链接或文章吗?
我已经知道 SIMD 指令集包含 SSE1 到 SSE5。
不过没找到太多讲什么指令集支持MIMD arch。
在c++代码中,我们可以使用intrinsic来编写“SIMD运行”代码。
有没有办法编写“MIMD运行”代码?
如果 MIMD 比 SIMD 更强大,最好编写支持 MIMD 的 C++ 代码。
我的想法正确吗?