表达结果未使用:c ++编译器的奇怪行为?

时间:2016-12-08 15:09:55

标签: xcode c++11

我不小心输入了以下代码,但我的代码已成功构建,甚至正常运行。

std::string myString = "This is my string ";
std::shared_ptr<std::string> s = std::make_shared<std::string>(myString);
p->pushString(s);”accidental typo”;

它只是显示警告Expression result unused

为什么它不是编译器或运行时错误?

我正在使用Xcode编辑器

由于

2 个答案:

答案 0 :(得分:0)

你知道你可以将任意表达式作为语句吗?这就是函数调用的简单工作方式或作业。实际上声明

p->pushString(s);

实际上就是这样一个表达式语句。 p->pushString(s)部分是一个表达式,它是上下文(带有终止分号),将其转换为语句。

这也意味着你可以做类似

的事情
5;

或者在你的情况下

"some string here";

这些是有效的陈述。然而,它们会产生一个(合法地)丢弃或忽略的结果,但可能会导致编译器发出有关忽略结果的警告。

与...无异。

some_function_which_returns_a_result();  // Result ignored

答案 1 :(得分:0)

  

为什么它不是编译器错误?

因为它不违反C ++标准的任何规则。如果程序符合标准,则编译器应允许其编译。然而,它足够友好地警告你,表达是无用的。

  

或运行时错误?

该表达式不会导致任何已执行的代码,因此如果它导致运行时错误将会非常令人惊讶。