相关疑难解决方法(0)

为什么std :: for_each是非修改序列操作?

我刚读在C++标准std::for_each是一个非修改序列操作,具有沿find,search等等.这是否意味着应用于每个元素的函数不应该修改它们?这是为什么?什么可能出错?

这是一个示例代码,其中修改了序列.你能看到它有什么问题吗?

void foo(int & i)
{
    i = 12;
}

int main()
{
    std::vector<int> v;
    v.push_back(0);

    std::for_each(v.begin(), v.end(), foo);
    // v now contains 12
}
Run Code Online (Sandbox Code Playgroud)

我怀疑这只是一个解释问题,但我想对此有所了解.

PS:我知道我可以用std::transform而不是for_each,但那不是重点.

c++ foreach standards stl

10
推荐指数
3
解决办法
3319
查看次数

具有默认参数的成员函数指针

我试图创建一个指向具有默认参数的成员函数的指针.当我通过这个函数指针调用时,我不想为默认参数指定一个参数.根据标准,这是不允许的,但我从来没有发现任何标准不允许的东西,我不能以其他一致的方式做.到目前为止,我还没有找到办法做到这一点.

这是代码,说明我正在尝试解决的问题:

class MyObj
{
public:
 int foo(const char* val) { return 1; }
 int bar(int val = 42) { return 2; }
};

int main()
{
 MyObj o;

 typedef int(MyObj::*fooptr)(const char*);
 fooptr fp = &MyObj::foo;
 int r1 = (o.*fp)("Hello, foo.");

 typedef int(MyObj::*barptr)(int);
 barptr bp1 = &MyObj::bar;
 int r2 = (o.*bp1)(); // <-- ERROR: too few arguments for call

 typedef int (MyObj::*barptr2)();
 barptr2 bp2 = &MyObj::bar; // <-- ERROR: Can't convert from int(MyObj::*)(int) to int(MyObj::*)(void)
 int r3 = (o.*bp2)();
    return …
Run Code Online (Sandbox Code Playgroud)

c++

4
推荐指数
1
解决办法
6691
查看次数

标签 统计

c++ ×2

foreach ×1

standards ×1

stl ×1