c++ GCC检查引用类型是否与值相同

gk7wooem  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(128)

std::set被转换成MySet是很奇怪的,但是如何避免呢?

#include <bits/stdc++.h>

struct MySet : public std::set<int> {
  MySet(const std::set<int>& s) {
  }
};

std::set<int> get(int i) {
  return std::set<int>{i};
}

int main() {
  const MySet& a = get(0);
  std::cout << a.empty() << std::endl;  // true
}

const MySet& a = get(0);应给予编译错误。

aiazj4mn

aiazj4mn1#

常量MySet& a = get(0);应编译错误
这可以通过删除转换因子MySet::MySet(const std::set<int>&)或使其显式来完成,如下所示:

struct MySet : public std::set<int> {
//vvvvvvvv---------------------------------->make this ctor explicit
  explicit MySet(const std::set<int>& s) {
  }
};

int main() {
  const MySet& a = get(0);
  std::cout << a.empty() << std::endl;  // gives error now
}

相关问题