List initialization
c++吧
全部回复
仅看楼主
level 15
幻の上帝 楼主
私信显示没发出去,所以直接开贴回答。
2019年07月25日 15点07分 1
level 15
幻の上帝 楼主
原问题(@贴吧用户_7EbWM3X ):
否则,若 T 是与该类型元素不兼容的引用类型,则列表初始化被引用类型的一个临时量,并将引用绑定到该临时量。(若引用是非 const 左值引用则失败)【引用自:zh.cppreference.com/mwiki/index.php?title=cpp/language/list_initialization&variant=zh】
“该类型元素”该怎么理解?
相对于const T& = {};
我一直理解{}并不具有类型
2019年07月25日 15点07分 2
还是没懂啊~~
2019年07月25日 16点07分
level 15
幻の上帝 楼主
T是指被初始化的变量类型。元素指的应该是brace-init-list内的类型。元素可能用于初始化T,例如T的构造函数具有接受initializer_list实例的参数时,可以是多个元素。具体例子翻标准比较容易看清。
2019年07月25日 15点07分 3
struct t { t(){ } }; const t& v{ }; 相对于这种情况我该怎么理解呢? 元素类型这里指的什么?还是我举错例子了? 另外“若引用是非 const 左值引用则失败”这句话,如果是右值引用呢? 好多疑问~~
2019年07月26日 01点07分
@贴吧用户_7EbWM3X 这种情况适用“否则,若花括号初始化器列表为空…”这条规则
2019年07月26日 04点07分
@贴吧用户_7EbWM3X 右值引用就照常,不会失败
2019年07月26日 04点07分
@◆心之刃◆ 我觉得引用类型不是类类型~
2019年07月26日 04点07分
level 15
幻の上帝 楼主
发现这段例子还被CWG2267修过……
2019年07月25日 16点07分 6
level 6
一个新的问题:
这里说明单元素列表的 std::initializer_list 构造函数优先级高于复制构造函数
并且我也找到了下面这段话
另外:
既然是直接初始化,那么根据重载决议我找到了下面这个:
这些我觉得都说明:单元素列表的 std::initializer_list 构造函数优先级高于复制构造函数
但是在vs2019里我测试到相反的结果~~
那么这里是编译器bug还是过分解读?如果过分解读,vs又是根据什么条款执行这样的结果呢?
2019年07月26日 02点07分 7
vs bug,gcc和clang结果也不同。调用initializer_list构造函数是符合标准的。
2019年07月26日 04点07分
level 15
幻の上帝 楼主
对比标准原文,“兼容”条件是无中生有的错误。
中文页面我修复了,但是仅限于这个错误。
英文页面我编辑不了。还有 2019-02 CWG motion 9 等没有 merge 。
具体规则仍以标准草案为准。
2019年07月26日 05点07分 8
哇~这里有花~~
2019年07月26日 05点07分
CWG后面跟一串数字指的是什么?
2019年07月26日 05点07分
@贴吧用户_7EbWM3X 开会的干活。基本上editorial report里会提。cplusplus/draft里也会用这个当tag。
2019年07月26日 07点07分
感谢订正[真棒]
2019年07月29日 06点07分
1