C++ 显式构造函数与静态类型转换 structfoo { 显式Foo(inta):m(a){} int padd1,m,padd2; }; 空条(Foo){} int main() { 条(11);//好,给出错误 自动x=静态施法(37); x、 m; }
即使对象的构造函数被标记为显式的,C++ 显式构造函数与静态类型转换 structfoo { 显式Foo(inta):m(a){} int padd1,m,padd2; }; 空条(Foo){} int main() { 条(11);//好,给出错误 自动x=静态施法(37); x、 m; },c++,explicit,static-cast,C++,Explicit,Static Cast,即使对象的构造函数被标记为显式的,static\u castconstructFoo对象也可以吗 它在MSVC2013和GCC中工作是,static\u cast将使用显式构造函数 5.2.9静态强制转换[expr.Static.cast] 4表达式e可以使用 如果声明T(e),则静态转换形式为静态转换(e) 对于一些发明的临时变量t(8.5),格式良好。这个 这种显式转换的效果与执行 声明和初始化,然后使用临时变量 作为转换的结果。表达式e被用作glvalue 当且仅当初始化将其用作glval
static\u cast
constructFoo
对象也可以吗
它在MSVC2013和GCC中工作是,
static\u cast
将使用显式
构造函数
5.2.9静态强制转换[expr.Static.cast]
4表达式e可以使用
如果声明T(e),则静态转换形式为静态转换(e)
代码>
对于一些发明的临时变量t(8.5),格式良好。这个
这种显式转换的效果与执行
声明和初始化,然后使用临时变量
作为转换的结果。表达式e被用作glvalue
当且仅当初始化将其用作glvalue时
explicit
与构造函数相结合意味着编译器不会执行从int
到Foo
的任何隐式转换,而是要求一个人故意将其转换为
如果您的ctor不是显式的,那么即使这个表达式Bar('a')代码>将编译。可能重复的
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;
}