根据Scott Meyers的说法,C++在C上闪耀的一个领域是函数对象比函数指针更快.他说这是因为函数对象是内联的,这会提高速度.
我有两个问题:
我们如何验证函数对象实际上是内联的?我们能否在实践中验证这一点?
函数对象的内联是否依赖于我们使用的编译器,还是所有编译器的行为都是这样的?
让我们假设我想编写自己的输入和输出操纵器.
cin >> mymanip >> str;
Run Code Online (Sandbox Code Playgroud)
要么
cout << mymanip << str;
Run Code Online (Sandbox Code Playgroud)
我希望mymanip做的是切换我从输入中读取的字符并将结果分配给一个字符串.
所以,如果我输入"QwErTy",我会在字符串中输入"qWeRtY".
这是一个非常基本的任务,只有一个功能,但我想了解更多关于操纵器的知识.
有人能给出一个线索吗?
谢谢.
我正在尝试学习C++ 11的新功能,我有这个代码:
void print(int t, string separator)
{
cout << t << separator;
}
int elements[] = { 10, 20, 30, 40, 50, 60, 40 };
string delim = " - ";
for_each(elements, elements + 7, bind2nd(ptr_fun(print), delim));
Run Code Online (Sandbox Code Playgroud)
输出:
10 - 20 - 30 - 40 - 50 - 60 - 40 -
Run Code Online (Sandbox Code Playgroud)
关于ptr_fun,这个网站说:
从C++ 11开始,不推荐使用此函数和相关类型,而使用更通用的std :: function和std :: ref,这两者都从普通函数创建可调用的适配器兼容函数对象.
有人可以在没有ptr_fun和C++ 11推荐的函数的情况下重写上面的例子吗?
谢谢
我一直在使用操纵器一段时间而没有完全理解它们是如何工作的.
这段代码:
std::cout << std::hex << std::showbase;
std::cout << std::uppercase << 77 << '\n';
std::cout << std::nouppercase << 77 << '\n';
Run Code Online (Sandbox Code Playgroud)
或者这个:
std::cout << std::hex;
std::cout << std::setiosflags(std::ios::showbase | std::ios::uppercase) << 77 << '\n';
std::cout << std::nouppercase << 77 << '\n';
Run Code Online (Sandbox Code Playgroud)
两者输出:
0X4D // 'X' and 'D' uppercase
0x4d // 'x' and 'd' lowercase
Run Code Online (Sandbox Code Playgroud)
但是,以下任何代码行都不能将字符串"abcd"转换为大写.为什么?
std::cout << std::uppercase << "abcd" << '\n';
std::cout << std::setiosflags(std::ios::uppercase) << "abcd" << '\n';
Run Code Online (Sandbox Code Playgroud)
另一个问题是为什么showbase并且uppercase必须在std::ios::内部合格std::setiosflags()并且只能在std::外部那个功能? …
迭代器的一个简单用法是这样的:
vector<int> v;
vector<int>::iterator iter;
v.push_back(1);
v.push_back(2);
v.push_back(3);
for (iter = v.begin(); iter != v.end(); iter++)
cout << (*iter) << endl;
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
1)每当我们看到声明时,class-name::member-name它就是该类的静态成员.
那么,既然迭代器被声明为container<type>::iterator,我们可以认为它们是容器的静态成员吗?
2)由于迭代器使用相同的sintax指针解引用cout << (*iter) << endl;,我们可以认为它们也是指针吗?
谢谢