小编Izz*_*zzo的帖子

有效使用功能输出

过去几周我一直在尝试学习C++,并对良好实践提出疑问.

假设我有一个会产生一些对象的函数.定义函数以生成类型对象的输出是否更好,或者更好的是将函数作为参数传递给对象指针,以便它可以直接修改它?

我想这个答案取决于场景,但我很好奇效率如何发挥作用.当将对象作为参数传递给函数时,我知道使用const引用更有效,这样函数可以立即访问对象而无需生成副本.

在输出功能结果时,这种效率问题会起作用吗?

c++ c++11

2
推荐指数
1
解决办法
196
查看次数

有没有办法直接在函数参数中格式化字符串而不是使用临时字符串?

我有一个接受字符串(char数组)作为参数的函数.

void enterString(char * my_string);
Run Code Online (Sandbox Code Playgroud)

使用此功能时,我经常发现自己想要输入格式化的字符串.我使用sprintf来做到这一点.但是,我每次都必须创建一个临时字符串,这有点烦人:

char temp_str[100];
sprintf(temp_str, "My lucky number = %d", 11);
enterString(temp_str);
Run Code Online (Sandbox Code Playgroud)

有没有办法在函数参数中直接格式化字符串,所以我不必每次都创建一个临时字符串?就像是:

enterString("My lucky number = %d", 11);
Run Code Online (Sandbox Code Playgroud)

谢谢

c printf

2
推荐指数
1
解决办法
91
查看次数

如何将抽象基类unique_ptrs添加到地图中?

我目前正在用C++编写游戏.这个游戏有一个GameManager类.GameManager类包含一个包含指向游戏对象的指针的地图.我已经定义了一个GameObject类,它是一个简单地充当接口的抽象类.

我已经定义了两个派生自GameObject类的类:Enemy和Loot.

我希望我的GameManager类包含游戏对象的地图,或者更确切地说,指向游戏对象的指针.因为我的GameManager拥有这些对象,所以我希望地图包含std :: unique_ptr.

但是,我实际上很难将衍生对象(例如Enemy和Loot)添加到此地图中.

我希望我的GameManager迭代游戏对象并调用抽象方法.从本质上讲,我的GameManager并不关心某些东西是敌人,战利品还是其他东西,它只是想要能够调用基类中声明的"draw"方法.

我如何将指向派生类的unique_ptr添加到包含对基类的unique_ptr的映射?到目前为止,我的尝试导致代码无法编译.我一直收到一个错误,指出我不允许动态地将派生类指针强制转换为基类指针.

如果我使用原始指针,我觉得这个工作正常,但我打算使用智能指针.

码:

#include <memory>
#include <map>

class GameObject
{
public:
    virtual void draw() = 0;
};

class  Enemy : GameObject
{
public:
    void draw() {};
};

class  Loot : GameObject
{
public:
    void draw() {};
};

int main()
{
    std::map<int, std::unique_ptr<GameObject>> my_map;

    // How do I add an Enemy or Loot object unique_ptr to this map?
    my_map[0] = dynamic_cast<GameObject>(std::unique_ptr<Enemy>().get()); // doesn't compile, complains about being unable to cast to abstract class

    return …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance smart-pointers unique-ptr

2
推荐指数
1
解决办法
162
查看次数

为什么常量时间执行的 Big O 表示法是 O(1) 而不是 O(2)?

我知道 O(1) 表示无论输入维度如何,算法都将花费恒定的执行时间。我也明白 O(N) 表示与输入维度大小成正比的执行时间线性增加。

但是,我只是因为记住了它们的定义才知道这一点。我在解释 O(1) 方面没有直觉,只是回想一下这意味着恒定时间执行。我很好奇在阅读大 O 符号时如何理解直觉。

那么对于恒定时间执行 O(1),1 代表什么?为什么不是 O(2)?2 也是一个与输入大小 N 无关的常数。

algorithm big-o

2
推荐指数
1
解决办法
198
查看次数

为什么只有自动实现的属性才能在 C# 中具有初始值设定项?

尝试执行以下操作时,出现“只有自动实现的属性可以在 C# 中具有初始值设定项”错误:

   public int Precision
    {
        get { return Precision; } 
        set
        {
            if (value < 0)
                Precision = 0;
            else if (value > 15)
                Precision = 15;
            else
                Precision = value;
        }
    } = 12;
Run Code Online (Sandbox Code Playgroud)

为什么这是不允许的?

c# properties

2
推荐指数
2
解决办法
2389
查看次数

为什么 GCC 需要“-lpthread”来链接 pthread 函数,但不需要参数来链接其他函数?

如果我使用 pthread 函数,我必须在 GCC 上使用“-lpthread”参数以确保正确链接。但是,为什么 GCC 在链接其他标准函数时不需要额外的参数?示例:printf、scanf、POSIX 套接字等。

gcc glibc pthreads linker-errors

2
推荐指数
1
解决办法
572
查看次数

如何确定您的机器是否支持C中的标准整数数据类型?

我对C中stdint.h的概念有点熟悉.通过明确说明整数的大小,头文件将用该机器上的相应整数替换#define整数.例如,如果我的机器有16位无符号整数,uint32_t则将替换为long unsigned int.

但是,假设您的机器仅支持最多32位整数.如果你使用了会发生什么int64_t?如果本机不支持此整数大小,那么如何解决这个问题,因为没有替代方法可以修复它?

编译器会抛出错误并说它无法解决吗?或者它会尝试使用两个32位分配来保存64位数据类型吗?

c stdint

1
推荐指数
1
解决办法
215
查看次数

从套接字“读取零字节”是否是监视 POSIX C 中 TCP/IP 断开连接的有效方法?

我目前正在审查一个实现 POSIX 套接字的 C 应用程序。此应用程序通过从套接字读取零字节来间歇性地检查与服务器的连接是否有效。然后检查是否设置了 errno 以确定连接是否正常。这是一个强大的解决方案吗?

uint32_t IsConnected()
{
        char dummy[10];
        if(read(global_sockfd, dummy, 0) == -1)
        {
            if(errno != EWOULDBLOCK && errno != EAGAIN)
                return FALSE;
            else
                return TRUE;
        }   
        else
            return TRUE;
}
Run Code Online (Sandbox Code Playgroud)

c sockets linux posix tcp

1
推荐指数
1
解决办法
90
查看次数

什么时候使用没有 typedef 的结构体有意义?

C 中的结构声明了一个数据结构,它将不同的数据类型关联到一块连续的内存中。

Typedef 是一种创建用户定义的数据类型名称的方法。这对许多应用程序都很有用,包括<stdint.h>

结构似乎专门与 typedef 一起使用。似乎定义 a 的默认行为struct也应该定义 a typedef

为什么我要在struct不使用 a 的情况下进行定义typedef

c struct typedef

1
推荐指数
1
解决办法
117
查看次数

为什么必须存在多种文件系统“类型”?

文件系统提供了一种对磁盘上的数据进行分类(从而导航)的机制。这对我来说很有意义。如果我想找到一些“组”数据,我不想自己记住字节偏移量。我宁愿有一些可以动态导航的查找系统。

但是,我不明白为什么必须存在不同的文件系统。例如,为什么是 NTFS、FAT16/32、EXT?

为什么不同的操作系统(Linux、Windows 等)要依赖不同的方法来组织磁盘上的数据?

filesystems operating-system ntfs file fat

1
推荐指数
1
解决办法
748
查看次数