为什么下面的代码编译时没有警告。注意,blablabla()在任何地方都没有定义。
我在gcc 5.1.0
和clang-3.7.0
中进行了测试(带有和不带有-std = c++ 11标志)。
#include <string>
int main()
{
std::string(blablabla());
}
这个问题是,而不是,这是最令人头疼的解析歧义的重复,因为相关示例使用参数声明了函数。
最佳答案
啊,我笨。
它不被视为通话。编译器只是将其视为声明。
尝试进行比较:
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();
会做。局部函数声明。