小编And*_*sov的帖子

=默认构造函数可见性

我有这样的代码

class A
{
    A() = default;
};

class B
{
    B(); 
};

B::B() = default;

int main()
{
    A a{}; //1
    A a1;  //2
    B b{}; //3
    B b1;  //4
}
Run Code Online (Sandbox Code Playgroud)

第2,3,4行按预期生成编译错误.但第1行有效!请解释

  1. 第1行和第2行之间的区别?在我看来,他们都应该使用默认构造函数并生成相同的错误.
  2. A和B类中构造函数之间的差异.

c++ default-constructor c++11

6
推荐指数
0
解决办法
59
查看次数

重新定义<运算符以在字符串的stl算法中使用

是否可以在operator <不修改std名称空间的情况下重新定义字符串,以使此运算符在标准算法中使用?例如,我可以写:

namespace std
{

    bool operator <(const std::string & rhs, const std::string & lhs)
    {
        std::cout << "lol";
        return false;
    }

}

int main()
{
    std::vector<std::string> lol = { "a", "b", "ba", "aa" };
    std::sort(lol.begin(), lol.end());
}
Run Code Online (Sandbox Code Playgroud)

并且"lol"将被打印几次.但是如果我operator <从std名称空间移出外部,operator <将使用默认值并且不会打印任何内容.是否可以std::sort使用自定义operator <而不将其包含在std命名空间中?

是的,我知道,我可以将另一个比较器传递给std :: sort但是如果我可以按照我的要求做什么怎么办呢?

我也是正确的,将这样的模板特化添加到std命名空间是正确的吗?

更新:这不是一个实际问题,我只是想知道如果可能的话我该怎么做.

c++ templates operator-overloading std

4
推荐指数
2
解决办法
173
查看次数