【发布时间】:2016-01-21 08:36:33
【问题描述】:
为什么下面的代码编译时没有警告。请注意,blablabla() 没有在任何地方定义。
我在 gcc 5.1.0 和 clang-3.7.0 中对其进行了测试(带有和不带有 -std=c++11 标志)。
#include <string>
int main()
{
std::string(blablabla());
}
这个问题不是重复最令人头疼的解析歧义,因为相关示例声明了带有参数的函数。
【问题讨论】:
-
如果我猜测一下,该语句已被优化,因为您根本没有以任何方式使用它。您没有将字符串分配给变量,也没有将其传递给函数。因此,编译器很可能会“忽略”它。但这是一个猜测。
-
警告应该独立于任何最近的编译器中的任何优化。
-
std::string(blablabla());和std::string blablabla();不一样吗? -
@oo_miguel - 这是标准的 C 声明语法。有时需要
(),例如在创建指向函数int (*f)();的指针与返回指针int* f();的函数不同时。 允许使用额外的(),即使不是严格需要,因为这使语言描述更简单。
标签: c++ c++11 compilation compiler-errors