qdi*_*dii 83 c++ casting explicit operator-keyword
当涉及构造函数时,添加关键字会explicit阻止热情的编译器在不是程序员的第一个意图时创建对象.这种机制是否也适用于铸造操作员?
struct Foo
{
operator std::string() const;
};
Run Code Online (Sandbox Code Playgroud)
例如,在这里,我希望能够投入Foo到一个std::string,但我不希望这种投射是隐含的.
Naw*_*waz 100
是和否.
这取决于您使用的C++版本.
explicit类型转换运算符例,
struct A
{
//implicit conversion to int
operator int() { return 100; }
//explicit conversion to std::string
explicit operator std::string() { return "explicit"; }
};
int main()
{
A a;
int i = a; //ok - implicit conversion
std::string s = a; //error - requires explicit conversion
}
Run Code Online (Sandbox Code Playgroud)
编译它g++ -std=c++0x,你会得到这个错误:
prog.cpp:13:20:错误:请求从'A'转换为非标量类型'std :: string'
在线演示:http://ideone.com/DJut1
但是一旦你写道:
std::string s = static_cast<std::string>(a); //ok - explicit conversion
Run Code Online (Sandbox Code Playgroud)
错误消失了:http://ideone.com/LhuFd
顺便说一下,在C++ 11中,显式转换运算符如果转换为布尔值则称为"上下文转换运算符".另外,如果您想了解有关隐式和显式转换的更多信息,请阅读以下主题:
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
23223 次 |
| 最近记录: |