edA*_*a-y 14 c++ language-lawyer c++11
似乎不允许使用auto关键字声明不同类型的多个变量.我无法弄清楚标准中可能会阻止它的措辞.
auto i = 1, j = 1.0; //deduction failure (several compilers)
从历史上我理解,因为你只有一个decl-specifier-spec.但是,标准中的规则似乎并未排除,实际上它们鼓励,这auto可能是每种规则的不同类型.考虑以下段落:
8-3 声明中的每个init-declarator都会被单独分析,就好像它本身就在声明中一样.
7.1.6.4-7如果声明符列表包含多个声明符,则每个声明的变量的类型如上所述确定.[...]
即使没有auto所有变量都需要具有相同的类型,因为某些修饰符*可以单独应用于每个声明符.现在看来,措辞允许每个auto声明者是完全不同的类型.
哪一段会禁止这个?
对列表中的每个对象执行类型推导,但最终结果必须是单一类型[dcl.spec.auto]/7(强调我的):
如果声明符列表包含多个声明符,则每个声明的变量的类型如上所述确定.如果针对模板参数U推导出的类型在每个推导中不相同,则该程序是不正确的.
| 归档时间: | 
 | 
| 查看次数: | 456 次 | 
| 最近记录: |