我正在阅读C++ Primer 5th中的代码(6.2.6.具有不同参数的函数):
void error_msg(ErrCode e, initializer_list<string> il)
{
cout << e.msg() << ": ";
for (const auto &elem : il)
cout << elem << " ";
cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
我总是auto直接在一个范围内使用for.像这样:
for (auto &elem : il)
Run Code Online (Sandbox Code Playgroud)
但我以前从未见过.我const auto&知道a中的元素initializer_list总是const值.这是使用的理由const auto&吗?
根据cppreference,C++ 11应该支持:
template< class InputIt >
iterator insert( const_iterator pos, InputIt first, InputIt last );
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用g ++ 4.9.2编译以下代码时:
std::string str{ "hello world" }, addition{ "h my" };
auto iter = str.erase(str.begin(), str.begin() + 4);
iter = str.insert(next(iter), addition.begin(), addition.end()); // Error
Run Code Online (Sandbox Code Playgroud)
我收到以下错误(实例):
error: no match for 'operator=' (operand types are '__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >' and 'void')
iter = str.insert(next(iter), addition.begin(), addition.end());
^
Run Code Online (Sandbox Code Playgroud)
但是,Visual Studio 2013和Clang似乎没问题.
这是C++ Primer第5版的练习,其中包括:
练习6.24:解释以下功能的行为.如果代码中存在问题,请说明它们是什么以及如何解决它们.
void print(const int ia[10])
{
for (size_t i = 0; i != 10; ++i)
cout << ia[i] << endl;
}
Run Code Online (Sandbox Code Playgroud)
我在代码中找不到任何问题.这个练习有什么意义?
我有一个第一行显示“> FileName.txt”的文件。我的目标是阅读此行,并将“ FileName.txt”保存到一个名为name的变量中。所以我有:
ifstream file;
/* File opening stuff */
string line, name;
getline(file,line);
stringstream converter(line);
converter >> name;
Run Code Online (Sandbox Code Playgroud)
这样就完成了将“> FileName.txt”保存到变量中name,但是我需要删除'>'字符。我不确定在此之后是否应该这样做,或者是否可以使用来完全跳过它stringstream。