gpt4 book ai didi

c++ - 为什么这个复合语句作为由大括号和括号括起来的语句序列似乎不是有效的语句表达式

转载 作者:行者123 更新时间:2023-12-01 14:03:55 29 4
gpt4 key购买 nike

为什么这个复合语句作为由大括号括起来(在 GNU C++ 中)和括号内的语句序列似乎不是有效的 Statement 表达式。

// my second program in C++
#include <iostream>
using namespace std;

int main ()
{
cout << "Hello World! ";
({cout << "I'm a C++ program";});

}

编译器输出:
 In function 'int main()':
8:32: error: use of deleted function 'std::basic_ostream<char>::basic_ostream(const std::basic_ostream<char>&)'
In file included from /usr/include/c++/4.9/iostream:39:0,
from 2:
/usr/include/c++/4.9/ostream:58:11: note: 'std::basic_ostream<char>::basic_ostream(const std::basic_ostream<char>&)' is implicitly deleted because the default definition would be ill-formed:
class basic_ostream : virtual public basic_ios<_CharT, _Traits>
^
/usr/include/c++/4.9/ostream:58:11: error: use of deleted function 'std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)'
In file included from /usr/include/c++/4.9/ios:44:0,
from /usr/include/c++/4.9/ostream:38,
from /usr/include/c++/4.9/iostream:39,
from 2:
/usr/include/c++/4.9/bits/basic_ios.h:66:11: note: 'std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)' is implicitly deleted because the default definition would be ill-formed:
class basic_ios : public ios_base
^
In file included from /usr/include/c++/4.9/ios:42:0,
from /usr/include/c++/4.9/ostream:38,
from /usr/include/c++/4.9/iostream:39,
from 2:
/usr/include/c++/4.9/bits/ios_base.h:786:5: error: 'std::ios_base::ios_base(const std::ios_base&)' is private
ios_base(const ios_base&);
^
In file included from /usr/include/c++/4.9/ios:44:0,
from /usr/include/c++/4.9/ostream:38,
from /usr/include/c++/4.9/iostream:39,
from 2:
/usr/include/c++/4.9/bits/basic_ios.h:66:11: error: within this context
class basic_ios : public ios_base
^

我在 What's this C++ syntax that puts a brace-surrounded block where an expression is expected? 中找到了关于“语句表达式”的好答案

最佳答案

来自 reference :

The last thing in the compound statement should be an expression followed by a semicolon; the value of this subexpression serves as the value of the entire construct.





In G++, the result value of a statement expression undergoes array and function pointer decay, and is returned by value to the enclosing expression.



这意味着在表达式中:
({cout << "I'm a C++ program";}); 

对象 std::cout按值返回。这将调用 std::basic_ostream 的复制构造函数, 被删除,因此出现错误。

关于c++ - 为什么这个复合语句作为由大括号和括号括起来的语句序列似乎不是有效的语句表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62092595/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com