gpt4 book ai didi

c++ - 继承一个 C 结构并将对象指针传递给 c 函数——这安全吗?

转载 作者:太空狗 更新时间:2023-10-29 21:22:30 25 4
gpt4 key购买 nike

据我所知,C++ 没有自己的时间计算类,因此我们可以使用 C 库的功能。

因此,我决定制作一个 C++ 包装类,它与 struct timespec 一起工作并调用与 struct timespec 一起工作的函数。由于结构和类在 C++ 中几乎相同,因此类可以继承结构。所以,我可以像这样继承 struct timespec:

class Time: timespec {
public:
Time();
Time(int mseconds);

Time operator+(Time& t1);
friend std::ostream& operator<<(std::ostream& os, const Time &t);
};

现在的问题是:在 C 中,我们这样做是为了获取当前的单调时间:

struct timespec ts;
clock_gettime(CLOCK_MONOTONIC,&ts);

在我的 C++ 类中,我希望构造函数使用当前时间初始化类。

Time::Time()
{
clock_gettime(CLOCK_MONOTONIC,this);
}

像 struct timespec 指针一样使用 this 指针。

它编译正常,但是......

这样安全吗?是否保证它应该有效?

继承类时,派生类指针与基类指针兼容。但是该指针与传递给 C 函数的 C 结构指针兼容吗?

最佳答案

您通过 this 的具体示例来自构造函数,是安全的,因为 clock_gettime 的形式参数类型是const struct timespec * (转换指针,调整任何可能的偏移量)。

标准对传递 this 设置了一些限制来自构造函数。本质上它涉及在构造完成之前对对象的回调。但你没有那样做。

但与其担心,为什么不直接使用数据成员而不是继承呢?


顺便说一句,请注意,从 C++11 开始,C++ 现在具有 <chrono> header ,具有更高级别的时间实用程序。

关于c++ - 继承一个 C 结构并将对象指针传递给 c 函数——这安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20465583/

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