对end()解引用安全吗?
Is it safe to dereference end()?
我有一个签名如下的函数:
std::string f(const char *first, const char *last) {
std::string result;
std::for_each(first, last, some_lambda_which_appends_to_result);
return result;
}
和std::string的重载,调用它:
std::string f(const std::string s) {
return f(&*s.begin(), &*s.end());
// The one below would assume that the string is not empty
// f(& s.front(), & s.front() + s.size());
}
然而,这可能是不安全的(解引用s.end()本身可能是红牌违规)。是否有一种安全的方法来获得一个指向字符开始的指针和一个经过一次结束的指针(在空字符串的情况下,两个空指针就可以了),还是必须写
std::string(const std::string& s) {
return s.empty() ? std::string() : f(& s.front(), & s.front() + s.size());
}
取消对end()
的引用是不安全的。然而,您可以使用c_str()
或data()
来实现您所需要的:
std::string(const std::string& s) {
return f(s.data(), s.data() + s.size());
}
相关文章:
- 线程安全的引用计数队列C++
- 将常量引用成员设置为临时变量是否安全
- 为什么引用比指针更安全?
- 为什么右值引用被认为比右值引用更安全?
- 这安全吗?右值和引用返回值
- std::串联的字符串引用是安全的
- 在 C++ 中更改越界指针的取消引用是否安全?
- 通过引用从 c++ 函数异常返回对象是否安全
- 通过引用返回共享对象是否安全"std::lock_guard<mutex>"?
- 返回强制引用是否安全
- 将 const 引用传递给临时字符串对象在 C++ 中安全吗?
- 有没有更好/安全的方法将shared_ptr的非常量引用强制转换为基类
- 检查指针是否为null,然后在同一if语句中取消引用它,这样安全吗
- 取消引用指向不同线程中的原子对象的只读非原子指针是否安全
- 对 std::atomic::load 的结果使用结构取消引用 (->) 运算符是否安全
- C++中的安全指针取消引用
- 初始值设定项列表引用类型安全
- 以这种方式返回对新创建的对象的引用,这是一种安全的做法
- 通过make_unique取消引用下转换的派生对象是否安全
- 如何维护对另一个类中的元素的线程安全引用