为什么以下代码在没有警告的情况下编译。请注意, blablabla()未定义任何地方。
我在gcc 5.1.0
和clang-3.7.0
(包括和不包含 -std = c ++ 11 标志)中对其进行了测试。
#include <string>
int main()
{
std::string(blablabla());
}
这些问题不是最令人烦恼的解析歧义的副本,因为相关示例使用参数声明函数。
答案 0 :(得分:8)
啊,我愚蠢。
它不被视为通话。编译器只是将其视为声明......
尝试进行比较:
int main() {
int(blablabla);
}
这给出了:
test.c++: In function ‘int main()’:
test.c++:6:9: warning: unused variable ‘blablabla’ [-Wunused-variable]
int(blablabla);
^
更确切地说,您的陈述std::string(blablabla())
声明blablabla
是一个返回std::string
的函数,与
std::string blablabla();
会这样做。本地函数声明。