我有这样的代码
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行有效!请解释
是否可以在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命名空间是正确的吗?
更新:这不是一个实际问题,我只是想知道如果可能的话我该怎么做.