Tru*_*eon 7 c++ explicit implicit-conversion c++11
在Youtube上的GoogleTechTalks视频中,Bjarne Stroustrup谈到即将推出的C++ 0x标准.在视频中,他提到了以下示例:
#include <iostream>
struct Sick
{
Sick(double d) { std::cout << d << "\n"; }
explicit Sick(int i) { std::cout << i << "\n"; }
};
int main()
{
Sick s1 = 2.1;
Sick s2(2.1);
}
Run Code Online (Sandbox Code Playgroud)
他是否意味着将explicit关键字放在之前Sick(double)而不是Sick(int),以突出显示与某些上下文中的隐式转换相关的问题?
在他的讨论中,Stroustrup提到了直接初始化,例如
Sick s2(2.1);
Run Code Online (Sandbox Code Playgroud)
只考虑explicit有任何explicit构造函数的构造函数.这不是我对几个编译器(包括GCC 4.6.1和MSVC 16/VS 2010)的经验,而且我在标准中找不到这样的要求(尽管如果有人可以指出它我会感兴趣).
但是,如果在初始化器中使用了int,我认为该示例将显示Stroustrup的用途:
#include <iostream>
struct Sick
{
Sick(double d) { std::cout << "double " << d << "\n"; }
explicit Sick(int i) { std::cout << "int " << i << "\n"; }
};
int main()
{
Sick s1 = 2;
Sick s2(2);
}
Run Code Online (Sandbox Code Playgroud)
运行以上将显示:
double 2
int 2
Run Code Online (Sandbox Code Playgroud)
显示两个明显等效的初始化实际上选择了不同的构造函数.
(或者正如Truncheon在问题中提到的 - 我错过了 - explicit关键字应该在Sick(double d)构造函数上).
| 归档时间: |
|
| 查看次数: |
811 次 |
| 最近记录: |