相关疑难解决方法(0)

std :: less是否必须与指针类型的相等运算符一致?

我昨天碰到了一个问题,我最终将其提炼成以下最小的例子.

#include <iostream>
#include <functional>

int main()
{
    int i=0, j=0;
    std::cout
        << (&i == &j)
        << std::less<int *>()(&i, &j)
        << std::less<int *>()(&j, &i)
        << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

当使用启用了优化的MSVC 9.0进行编译时,此特定程序将输出000.这意味着

  1. 指针不相等,和
  2. std::less两个指针都没有按照另一个指令排序,这意味着两个指针根据强加的总顺序相等std::less.

这种行为是否正确?std::less不需要与平等运算符一致的总顺序是什么?

是否允许输出以下程序1

#include <iostream>
#include <set>

int main()
{
    int i=0, j=0;
    std::set<int *> s;
    s.insert(&i);
    s.insert(&j);
    std::cout << s.size() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ pointers

13
推荐指数
2
解决办法
469
查看次数

标签 统计

c++ ×1

pointers ×1