rel*_*xxx 4 c++ explicit static-cast
struct Foo
{
explicit Foo(int a):m(a){}
int padd1, m, padd2;
};
void Bar(Foo){}
int main()
{
Bar(11); // OK, gives error
auto x = static_cast<Foo>(37);
x.m;
}
Run Code Online (Sandbox Code Playgroud)
即使构造函数被标记,static_cast构造Foo对象也没关系explicit吗?
它适用于MSVC2013和GCC http://ideone.com/dMS5kB
是的,static_cast将使用explicit构造函数.
5.2.9静态强制转换[expr.static.cast]
4.一种表达式e可以显式转换到使用以下形式的的static_cast类型T
static_cast<T>(e),如果声明T t(e);是良好的形成,对于某些发明临时变量t(8.5).这种显式转换的效果与执行声明和初始化,然后使用临时变量作为转换结果相同.当且仅当初始化将其用作glvalue时,表达式e用作glvalue.
| 归档时间: |
|
| 查看次数: |
731 次 |
| 最近记录: |