小编Kel*_*lno的帖子

仅在首次使用变量时计算变量的最佳模式是什么?

这不是一个实际问题,但我正在寻找一种模式来改善以下逻辑:

void PrintToGameMasters()
{
    std::string message = GetComplicatedDebugMessage(); // This will create a big string with various info
    for (Player* player : GetAllPlayers())
       if (player->IsGameMaster())
           player->SendMessage(message);
}
Run Code Online (Sandbox Code Playgroud)

该代码有效,但我遇到的问题是,在大多数情况下,没有任何gamemasters参与者,因此消息编写将一事无成。

我想写一些只会在第一次使用该变量时就创建消息的东西,但是在这里我无法提出一个好的解决方案。

编辑:为了使这个问题更精确,我正在寻找一个不是特定于字符串的解决方案,它可能是一个没有函数来测试它是否已初始化的类型。如果我们可以将调用保持在GetComplicatedDebugMessage循环的顶部,这也是一个很大的奖励点,我认为一个涉及包装器的解决方案可以解决这个问题。

c++

51
推荐指数
7
解决办法
4939
查看次数

在指针数组中进行转换和写入会报告使用 clang sanitizer 未对齐的地址

我使用 char* 数组来存储不同的数据类型,如下一个示例所示:

int main()
{
    char* arr = new char[8];
    *reinterpret_cast<uint32_t*>(&arr[1]) = 1u;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

用clang UndefinedBehaviorSanitizer编译运行会报如下错误:

runtime error: store to misaligned address 0x602000000011 for type 'uint32_t' (aka 'unsigned int'), which requires 4 byte alignment
Run Code Online (Sandbox Code Playgroud)

我想我可以用另一种方式来做,但为什么这是未定义的行为?这里涉及到哪些概念呢?

c++

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

标签 统计

c++ ×2