下面的代码打印1010
#include <iostream>
#include <range/v3/algorithm/starts_with.hpp>
int main () {
using namespace std::literals;
std::cout << ranges::starts_with("hello world"s, "hello"s)
<< ranges::starts_with("hello world"s, "hello")
<< ranges::starts_with("hello world", "hello"s)
<< ranges::starts_with("hello world", "hello") << std::endl; // prints 1010
}
为什么会这样?
我还注意到,如果两个stin相同,那么最后一个case也返回1
:
std::cout << ranges::starts_with("hello world"s, "hello world"s)
<< ranges::starts_with("hello world"s, "hello world")
<< ranges::starts_with("hello world", "hello world"s)
<< ranges::starts_with("hello world", "hello world") << std::endl; // prints 1011
我知道std::string
,比如"bla"s
,是一个范围,而char[N]
也是一个范围,给定一个常数N
,所以我不明白为什么
1条答案
按热度按时间abithluo1#
像
"hello"
这样的字符串文字是一个const char[N]
数组,其中N
包括空终止符的空间,例如char[6] = {'h','e','l','l','o','\0'}
。像
"hello"s
这样的字符串文字是一个std::string
对象,它在其size()
中不包括空终止符。所以,你最终得到: