小编Vat*_*san的帖子

在C++中显式调用原始运算符函数

int a, b, c; 

//do stuff. For e.g., cin >> b >> c; 

c = a + b;          //works 
c = operator+(a,b); //fails to compile, 'operator+' not defined. 
Run Code Online (Sandbox Code Playgroud)

这另一方面起作用 -

class Foo
{
 int x; 
public:
 Foo(int x):x(x) {} 

 Foo friend operator+(const Foo& f, const Foo& g)
 {
  return Foo(f.x + g.x); 
 }

};    

Foo l(5), m(10); 

Foo n = operator+(l,m); //compiles ok! 
Run Code Online (Sandbox Code Playgroud)
  • 甚至可以直接调用基本类型的运算符+(和其他运算符)(如int)吗?
  • 如果有,怎么样?
  • 如果没有,是否有一个C++参考措辞,明确表明这是不可行的?

c++ function operator-keyword

7
推荐指数
1
解决办法
3413
查看次数

为什么需要将全局匿名联合声明为静态?

C++ 0x草案

9.5.6在命名空间或全局命名空间中声明的匿名联合应声明为静态.

为什么?


最新情况:

基于Bart van Ingen Schenau和Lothar的回应,到目前为止最好的解释可能是:

如果在两个翻译单元中遇到相同的全局匿名联合(例如,通过头文件),那么如何满足一个定义规则?这两个定义是否被视为相同并合并在一起?或者这两个定义是否被视为不同?如果它们被视为相同,那么编译器可能正在做"魔术",否则对其他实体不起作用.如果它们被视为相同,那么编译器在没有程序员的明确同意的情况下这样做......所以我想通过要求将其声明为静态来强制明确同意.

c++ anonymous-types unions c++11

6
推荐指数
2
解决办法
2016
查看次数