Mar*_*son 34 c++ auto return-type-deduction c++14
请考虑以下代码段:
struct A
{
auto foo(), bar();
};
auto A::foo() { return 1; }
auto A::bar() { return 'a'; }
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
它在Clang ++ 3.7.0中编译得很好.
它在G ++ 5.2.0中失败:
main.cpp: In member function 'auto A::bar()':
main.cpp:7:24: error: inconsistent deduction for 'auto': 'int' and then 'char'
auto A::bar() { return 'a'; }
Run Code Online (Sandbox Code Playgroud)
自动返回类型推导是否强制在单个语句中声明的多个函数具有相同的返回类型?
Bo *_*son 25
是.
auto
并不意味着"任何类型",它意味着编译器应该推断出的特定类型.
这不是特定于函数声明,auto i = 1, f = 4.7;
也不起作用.
此外,无论如何,在单个语句中声明多个函数似乎并不是一个好主意.
chr*_*ris 25
基于以下内容,GCC在这种情况下具有正确的行为,但只是巧合(见下文):
§7.1.6.4[dcl.spec.auto]/8
如果init-declarator-list包含多个init-declarator,它们都将形成变量声明.
为什么只巧合?错误消息是一个线索.更改函数以推断相同的返回类型会导致GCC编译代码.虽然在这里给出错误是正确的,虽然是误导性的,但只有当推断出的类型不一致时才会这样做.它应该总是出错.
归档时间: |
|
查看次数: |
1918 次 |
最近记录: |