这代码,实在看不下去。居然还有把const int* 强转成int *的。
coding style 101
单参数ctor无特殊情况加上explicit
没事不要去猜编译器/规范
【 在 xieyf ( meitian ) 的大作中提到: 】
: 标 题: Re: 问个奇怪的对象初始化问题 : A a = b; // B b;
: 发信站: 水木社区 (Sat Nov 14 10:38:14 2020), 站内
:
: // 代码来了, 下面的代码 vs2015能过, 走转换-构造通道, 但是g++就不给过, 提示
: : error: conversion from 'B' to non-scalar type 'A' requested
:
: 那么问题来了, 我如果想办法让gcc过了, 那vs和gcc的编译后软件行为居然不一样?
:
: 同一份代码, 在两个编译器下执行结果不一样的问题, 是普遍的吗?
:
:
: #include <stdio.h>
:
: struct A;
:
: struct B
: {
: B(int *p = nullptr) : m_p(p) {}
: operator int* () const {
: puts("[called] operator int* () const ");
: return m_p;
: }
: // data
: int* m_p = nullptr;
: };
:
: struct A
: {
: A(const int *p) : m_p((int*)p) { puts("[called] A(const int *p) "); }
:
: //data:
: int* m_p = nullptr;
: };
:
:
: int main()
: {
:
: B b;
: A a = b;
:
: printf("a.p:%p b.p:%p\n", a.m_p, b.m_p);
: }
:
: 【 在 xieyf ( meitian ) 的大作中提到: 】
: : 假设 B b;
: : A和B不同类型, 那么
: : cpp标准说 A a = b; 是一定走构造函数的吧, 如果a和b是不同类型, 会首先调用
: : ...................
:
: --
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 120.244.224.*]
--
FROM 76.126.252.*