c++ - 我应该修复这个晦涩但优雅的 C++ 代码片段吗?

标签 c++ language-lawyer

<分区>

我遇到了这段优雅的代码,然而,它依赖于一个晦涩但基本的低级特征:

std::string file_path_leaf( std::string const & path )
{
    auto const pos = path.find_last_of("/\\"); // windows or posix
    return path.substr( pos + 1 ); // a walk on the wild side?
}

在极端情况下('find_last_of' 失败)它工作正常,即它单独留下字符串。但它是不是太晦涩了?

最佳答案

根据 http://en.cppreference.com/w/cpp/string/basic_string/npos npos 实际上是 ...一个特殊值,等于类型 size_type 可表示的最大值。与 C++11 标准交叉核对后,您会发现在类定义 21.4/5 中有详细说明。

然后无符号算术也同样由标准保证环绕,所以代码是完美定义的。

也就是说,您仍然可以为更改它提出清晰的论据。至少添加一条评论,说明它如何为 future 的维护者工作。

关于c++ - 我应该修复这个晦涩但优雅的 C++ 代码片段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48779396/

相关文章:

C++ 强制初始化表达式中左值的常量性

c++ - 为什么 bitand 没有正确解析以形成右值引用?

c# - 在声明点使用变量作为输出参数

c++ - 使用MSVC编译器和GCC编译器得到不同的结果

c++ - 如果 T1 和 T2 有, std::pair<T1,T2> 不应该有微不足道的默认构造函数吗?

c++ - 如何将两种类型的数据分配给一个变量?

c++ - 使用 CUDA 从 2D 图像编程 3D 模型

c++ - 将一维数组 reshape 为多维数组

C++/STL - 在 std::map 中访问类指针实例时程序崩溃

c++ - 假设 sizeof(std::unordered_map<std::string, T>) 对于所有 T 都相同实际上是安全的吗?