【问题标题】:c++ function is publicly callable despite explicitly declared private尽管明确声明为私有,但 c++ 函数仍可公开调用
【发布时间】:2018-04-28 14:39:59
【问题描述】:

我目前正在调查为什么我能够从不应访问的上下文中调用私有函数。我已经将其范围缩小为一个非常简单的示例,但我仍然无法确定问题所在。

LIVE example

这是我的缩小版:

template<typename From, typename To>
concept bool ConvertibleNoNarrow = requires(From f, To t) {
    t = { f };
};

template<typename T>
class Wrapper {
    T t;
public:
    Wrapper(ConvertibleNoNarrow<T> u) : t(u) { }

private:
    // should be PRIVATE
    void operator()() { }
};

int main() {
    Wrapper<long> w(1);

    // should not be able to call this!
    w();
}

【问题讨论】:

  • 我的第一直觉是它的a bug 带有实验性的东西
  • 您能否补充一下这种情况是否只发生在呼叫接线员或其他功能上?
  • @UlrichEckhardt 好像和operator ()没有关系,这只是我完整代码的残余。
  • 如果你取消使用这个概念会发生什么?例如使Wrappers 构造函数接受T 而不是ConvertibleNoNarrow&lt;T&gt;

标签: c++ c++11 c++-concepts


【解决方案1】:

是的。它应该是私有的,您不应该以这种方式呼叫该操作员。我已经尝试删除“概念”,而 g++/clang 确实对此有所抱怨。

【讨论】:

  • 这不是答案,而是评论。
  • 我无法添加 cmets。太新了:)
  • @UlrichEckhardt:没有问题要回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
相关资源
最近更新 更多