小编MrB*_*ido的帖子

在指针定义的行为映射中是否为nullptr的默认值?

以下代码似乎始终遵循true分支.

#include <map>
#include <iostream>

class TestClass {
  // implementation 
}

int main() {
  std::map<int, TestClass*> TestMap;
  if (TestMap[203] == nullptr) {
    std::cout << "true";
  } else {
    std::cout << "false";
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它是否为未初始化的指针定义了行为nullptr,或者是我的编译器的工件?

如果没有,我如何确保以下代码的可移植性?目前,我正在使用类似的逻辑来返回正确的单例实例log file:

#include <string>
#include <map>    

class Log {
  public:
    static Log* get_instance(std::string path);
  protected:
    Log(std::string path) : path(path), log(path) {};
    std::string path;
    std::ostream log;
  private:
    static std::map<std::string, Log*> instances;
};

std::map<std::string, Log*> Log::instances = std::map<std::string, Log*>();

Log* Log::get_instance(std::string path) …
Run Code Online (Sandbox Code Playgroud)

c++ big-o time-complexity c++11

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

有一个函数共享一个枚举类命名空间的方法?

简短版本:无论如何都要在enum类中嵌套函数,以便EnumClass::EnumLabel您可以拥有有用的相关函数,EnumClass::to_string(EnumClass value)而不是具有全局函数EnumClass_to_string(EnumClass value).

长版本:所以我正在玩OpenGL,它带有一堆整数,#defines用于GPU上的各种功能.对于C兼容性,这些定义在其标签之外没有真正的结构,这使得使用不正确的定义变得容易.为了帮助解决这个新手bug的来源,我一直在将相关的定义分组到enum类中,如下面的调试消息源示例:

enum class Source {
    API = GL_DEBUG_SOURCE_API,
    WINDOW_SYSTEM = GL_DEBUG_SOURCE_WINDOW_SYSTEM,
    SHADER_COMPILER = GL_DEBUG_SOURCE_SHADER_COMPILER,
    THIRD_PARTY = GL_DEBUG_SOURCE_THIRD_PARTY,
    APPLICATION = GL_DEBUG_SOURCE_APPLICATION,
    OTHER = GL_DEBUG_SOURCE_OTHER
};
Run Code Online (Sandbox Code Playgroud)

由于这些通常用于调试输出,我决定创建一个to_string函数来简化它们对logfiles的意义输出.

std::string source_to_string(KHR_debug::Source source) {
    if(source == KHR_debug::Source::API) {
        return "GL_DEBUG_SOURCE_API";
    } else if(source == KHR_debug::Source::WINDOW_SYSTEM) { 
        return "GL_DEBUG_SOURCE_WINDOW_SYSTEM";
    } else if(source == KHR_debug::Source::SHADER_COMPILER) {
        return "GL_DEBUG_SOURCE_SHADER_COMPILER";
    } else if(source == KHR_debug::Source::THIRD_PARTY) {
        return "GL_DEBUG_SOURCE_THIRD_PARTY";
    } else …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

标签 统计

c++ ×2

c++11 ×2

big-o ×1

time-complexity ×1