我不小心输入了以下代码,但我的代码已成功构建,甚至正常运行。
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编辑器
由于
答案 0 :(得分:0)
你知道你可以将任意表达式作为语句吗?这就是函数调用的简单工作方式或作业。实际上声明
p->pushString(s);
实际上就是这样一个表达式语句。 p->pushString(s)
部分是一个表达式,它是上下文(带有终止分号),将其转换为语句。
这也意味着你可以做类似
的事情5;
或者在你的情况下
"some string here";
这些是有效的陈述。然而,它们会产生一个(合法地)丢弃或忽略的结果,但可能会导致编译器发出有关忽略结果的警告。
与...无异。
some_function_which_returns_a_result(); // Result ignored
答案 1 :(得分:0)
为什么它不是编译器错误?
因为它不违反C ++标准的任何规则。如果程序符合标准,则编译器应允许其编译。然而,它足够友好地警告你,表达是无用的。
或运行时错误?
该表达式不会导致任何已执行的代码,因此如果它导致运行时错误将会非常令人惊讶。