使用std :: begin和std :: end进行矢量初始化

D. *_*lex 5 c++ vector string-literals

为什么它可行?有两个不同的字符串,"testString"但矢量大小正确分配.

#include <iostream>
#include <vector>
#include <iterator>

int main()
{
    std::vector<char> str;
    str.assign(std::begin("testString"), std::end("testString"));
    copy(str.begin(), str.end(), std::ostream_iterator<char>(std::cout, " "));

    std::cout<<str.size();

    return 1;
}
Run Code Online (Sandbox Code Playgroud)

Rev*_*lot 9

你很幸运,编译器执行了字符串池优化.请注意,您所做的仍然是未定义的行为,并且使用不同的编译器或不同的编译器设置,您将不会那么幸运.别再那么做了.