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

Why does "std::string(blablabla());" compile without errors?

本文关键字:有错误 编译 blablabla std string 为什么      更新时间:2023-10-16

为什么下面的代码编译时没有警告?注意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();

。局部函数声明