c++ - 确保 char 指针始终指向相同的字符串文字

标签 c++ c++17

给定代码

// somewhere in the program
const char* p1 = "Hello World";

// somewhere else in the program
const char* p2 = "Hello World";

有没有办法确保p1 == p2在整个程序/库中总是满意吗?我的意思是p1p2始终引用相同的字符串文字。

背后的原因

我想要实现的是使用 const char*作为 std::map<const char*, something> 的键.我有一个宏

#define nameof(id) #id

模仿 nameof 的行为C# 中的关键字(我知道这已经有缺陷),我想用它来访问注册表之类的结构,例如

void foo()
{
    auto x = getMapping(nameof(foo));
}

// different place in code

void registerFoo(something x)
{
    setMapping("foo", x);
}

最佳答案

正如 Barry 在 their answer 中展示的那样无法保证您想要的行为。您将不得不支付字符串比较的成本,但您至少可以避免任何内存分配或使用 std::string_view 编写比较器。 . std::string_view是一个字符串的轻量级 View ,它包含一个指向字符串数据的指针和字符串的大小,并且它有一个内置的 operator <。那将进行字典顺序比较。这会将您的 map 更改为

std::map<std::string_view, something>

关于c++ - 确保 char 指针始终指向相同的字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58866964/

相关文章:

c++ - 新/删除运算符不匹配错误有多严重?

c++ - 在 64 位系统上更大的指针有什么好处?

c++ - 在概念定义中,是否允许在 requires 表达式之外出现替换失败?

c++ - 如何检查字符串 vector 中字符的所有邻居

c++ - 命名空间 'hardware_constructive_interference_size' 中没有名为 'std' 的成员

c++ - 如何在C++中正确导航目录路径

c++ - 在 C++ 中仅连接字符串中的选定元素

c++ - 如何使用 boost::date_time 获取两个日期之间的天数

c++ - C++ 模块化编程中的可检索日志记录

c++ - 如何在 C++17 STL 并行算法中处理调度?