C++ 类栏{运算符Foo();}
这种类型的运算符重载意味着什么C++ 类栏{运算符Foo();},c++,constructor,operator-overloading,C++,Constructor,Operator Overloading,这种类型的运算符重载意味着什么 class Foo { Foo(int a) { ... } }; class Bar { operator Foo() { return Foo(25); } }; 这是用户定义的转换函数,它隐式地将Bar的实例转换为Foo Bar bar; Foo foo = bar; // bar implicitly converts into Foo. 就好像你写了这样的话: Foo foo = Foo(25); 如果您有这样的转换函数,则可
class Foo {
Foo(int a) { ... }
};
class Bar {
operator Foo() { return Foo(25); }
};
这是用户定义的转换函数,它隐式地将
Bar
的实例转换为Foo
Bar bar;
Foo foo = bar; // bar implicitly converts into Foo.
就好像你写了这样的话:
Foo foo = Foo(25);
如果您有这样的转换函数,则可以调用:
void f(Foo foo); //a function which accepts Foo
f(bar); // bar implicitly converts into Foo.
因此,这种隐式转换有时可能并不可取,因为它可能会导致问题,产生意外的结果。为了避免这种情况,可以将转换函数显式为(仅在C++11中):
现在,这两个都会产生错误:
Foo foo = bar; //error
f(bar); //error
但是,允许以下情况:
Foo foo = static_cast<Foo>(bar); //Ok
f(static_cast<Foo>(bar)); //Ok
Foo-Foo=static\u cast(条形)//好啊
f(静态_铸造(棒材))//好啊
这是cast操作符的过载。我能找到的最好的文档是
基本上,如果你有一个条
,你可以将它转换成一个Foo
,它由一个特定的值构成:
Bar b;
Foo f = b;
C++11中引入了使用显式
进行运算符转换?AFAIR-only构造函数在c++03中可能是显式的,或者我记不清了…@Als:你说得对。在C++03中,只有构造函数可以是显式的。我在答覆中已清楚说明这点。
Bar b;
Foo f = b;