为什么" std :: string(blablabla());"编译没有错误?

时间:2015-10-22 06:33:41

标签: c++ c++11 compilation compiler-errors

为什么以下代码在没有警告的情况下编译。请注意, blablabla()未定义任何地方。

我在gcc 5.1.0clang-3.7.0(包括和不包含 -std = c ++ 11 标志)中对其进行了测试。

#include <string>

int main()
{
    std::string(blablabla());
}

这些问题最令人烦恼的解析歧义的副本,因为相关示例使用参数声明函数。

1 个答案:

答案 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();

会这样做。本地函数声明。