为什么下面的代码编译时没有警告。注意,blablabla()在任何地方都没有定义。

我在gcc 5.1.0clang-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();

会做。局部函数声明。

10-04 20:29