![]() |
1
5
你关于Comeau的假设暗示
我怀疑这是Comeau附带的标准库实现中的一个bug,而不是核心Comeau编译器本身(尽管在本例中这一行比较模糊)。
如果构建的快速虚拟类的构造函数属性类似于
它之所以接受您的代码,最有可能的原因是因为
或作为
标准库规范明确指出,当两个整数值用作参数时,实现必须确保以某种方式选择了所形成的构造函数,即。
但是,作为对
如果你试试这个
您将发现编译器现在报告了一个错误(因为它不能再使用构造函数的两个迭代器版本),并且
同样的事情也发生在
在第二个想法中,我发现我解释的主要想法是正确的,但细节是错误的。而且,我把它称为科莫的一个问题可能是错的。科莫可能就在这里。 标准在23.1.1/9中规定
我怀疑如果上面的内容是逐字解释的,编译器就可以假定
如果comeau编译器的行为是正确的(我怀疑它实际上是正确的,根据标准的要求),我想知道这是否是委员会的意图,让这样一个漏洞保持开放,并允许实现在
|
![]() |
2
1
前两个例子是否出于某种原因实际符合? 它们不符合我刚尝试的编译器。(GCC 4.4.1) 为什么我可以转换40和50而不是2? 由于前两行与标准不一致,只有COMEAU才可能知道它们不一致的原因。 标准要求从int类型到任意向量的显式转换不是偶然的。这样做是为了防止混淆代码。 |
![]() |
3
1
在内部,它专门用于int迭代器,因此第一个参数被视为count,第二个参数是初始化向量的值。因为在将第二个参数赋给向量值时有一个强制转换,所以内部的构造函数
|
![]() |
4
0
您的示例不符合要求。如您所说,构造函数是显式的,因此不允许为构造函数传递int(y)而不是向量(并且y不向向量构造函数传递“x次”:第二个参数只创建一次,以初始化插入的对象)。 您的示例不适用于GCC(4.4&4.5)。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |