gpt4 book ai didi

c++如何定义不复制数据的强制转换运算符?

转载 作者:行者123 更新时间:2023-11-30 02:05:15 25 4
gpt4 key购买 nike

好吧 - 也许这是一个愚蠢的问题,类型转换运营商已经天生就这样做了..

我有什么:

  • 4x4 矩阵的一些外部类定义

  • 一些自己的 4x4 Matrix 类

两个类内部都简单地存储一个 float[16];

我想在我的 Matrix 类中定义一个转换运算符,这样我就可以做如下事情:

MyMatrix4x4 m;
OtherMatrix4x4(m).someFunctionDefinedInOtherMatrix4x4();
SomeFunctionThatTakesOtherMatrix4x4(OtherMatrix4x4(m));

而且我不希望这个运算符复制任何数据——函数应该简单地对相同的 float[16] 数据进行操作

怎么做?

最佳答案

And I don't want this operator to copy any data - the functions should simply operate on the same float[16] data

I don't want to create any data on the heap. want this to work with values on the stack - and also for convenciance i'd like to have a cast operator

嗯,这不会发生。 C++ 的别名规则几乎禁止这样做。

您可以使用指针转换来“假装这是别的东西”,但您不能使用对象转换来做到这一点。您可以将指向堆栈对象的指针转换为指向您的对象类型的指针:

MyMatrix4x4 m;
OtherMatrix4x4 * o = (OtherMatrix4x4 *) &m;

但是,有两个问题。首先,o 的持续时间与 m 的持续时间一样长。它不是一个对象;它是指向不同对象的指针。其次,这样做(通常)是未定义的行为(部分原因是违反别名:两个不相关的类型重叠)。哦,很有可能它会起作用。但就 C++ 的保证而言,您已经偏离了 map 。

这有点过早优化的味道。您真的认为复制 16 个 float 是一个很大的性能问题吗?如果是,那么为什么不在代码中使用 OtherMatrix4x4 而不是 MyMatrix4x4

关于c++如何定义不复制数据的强制转换运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9672263/

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