小编Bry*_*Fry的帖子

是否应该通过Koenig查找找到具有枚举参数的类中的朋友操作符?

请考虑以下代码:

enum A : unsigned { a = 1, b = 2, c = 4 };

class B
{
  friend constexpr A operator|(A a1, A a2)
  { return A(unsigned(a1) | unsigned(a2)); }
};

template <A a>
class C
{
};

int main()
{
  C<a|c> c;
}
Run Code Online (Sandbox Code Playgroud)

使用g ++(4.8.1,-std = c ++ 1)编译时,出现以下错误:

test.C: In function ‘int main()’:
test.C:16:12: error: invalid conversion from ‘unsigned int’ to ‘A’ [-fpermissive]
       C<a|c> c;
Run Code Online (Sandbox Code Playgroud)

这告诉我没有找到运营商.但是,如果代码更改为:

enum A : unsigned { a = 1, b = …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading c++11

5
推荐指数
1
解决办法
477
查看次数

运算符const Base&()是否应该用于不可访问的基类?

我想有一个类允许访问它的基本情况的const接口,但不是.特别是:

class B
{};

class A : private class B
{
public:
  operator const B&() { return *this; }
};

int main()
{
  A a;
  const B& b = a; // Should this line be an error?
}
Run Code Online (Sandbox Code Playgroud)

g ++给出了一个无法访问的基类错误.那些语言专家认为这个错误在C++ 11/C++ 14中是否正确?

是的,我意识到我可以(而且会)这样做:

int main()
{
  A a;
  const B& b = a.operator const B&();
}
Run Code Online (Sandbox Code Playgroud)

有关此构造的另一种方法的任何建议吗?

c++ c++11 c++14

5
推荐指数
1
解决办法
139
查看次数

标签 统计

c++ ×2

c++11 ×2

c++14 ×1

operator-overloading ×1