Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 显式构造函数与静态类型转换 structfoo { 显式Foo(inta):m(a){} int padd1,m,padd2; }; 空条(Foo){} int main() { 条(11);//好,给出错误 自动x=静态施法(37); x、 m; }_C++_Explicit_Static Cast - Fatal编程技术网

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
construct
Foo
对象也可以吗


它在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;
}