【发布时间】:2019-06-14 02:24:11
【问题描述】:
我在CodeSignal上发现了一段奇怪的C++语法:
string r, longestDigitsPrefix(string s)
{
for(auto const c : s)
{
if(isdigit(c))
r += c;
else
break;
}
return r;
}
第一行是在函数声明之前定义string r。这在现代 C++ 中有效吗?
上面的代码编译并通过了 CodeSignal 控制台中的所有测试,但是当我尝试在本地编译时它产生了编译器错误 (--std=c++14)。
这是现代 C++ 中的有效语法吗?如果是,它符合哪个标准修订版?
【问题讨论】:
-
你在哪里找到这个以及哪个编译器接受这个?从未见过这种(无效的)语法。
-
@MatthieuBrucher - 仔细检查后,语法产生的不同分支。
-
@MatthieuBrucher - 无效。我正在查看它描述的语法生成
decl a; decl b;-a或b可以是函数定义(注意分号)。但是函数定义可能不会出现在decl a, b; -
string r, longestDigitsPrefix(string s);将是有效的。您发布的代码无效。 -
你真的应该发布这个的 MCVE 版本,一个你自己用你的编译器使用的版本。
标签: c++ language-lawyer declaration