#include <range/v3/all.hpp>
#include <vector>
#include <string>
#include <deque>
using namespace std::literals;
int main()
{
auto src = std::vector{"123"s, "456"s, "789"s};
auto movable_rng = ranges::subrange(
std::make_move_iterator(src.begin()),
std::make_move_iterator(src.end()));
auto dst = ranges::to<std::deque<std::string>>(movable_rng);
for (auto e : src)
{
std::cout << e << std::endl;
}
for (auto e : dst)
{
std::cout << e << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
用 libc++ 用 clang 10 编译,输出为:
123
456
789
123
456
789
Run Code Online (Sandbox Code Playgroud)
正如我所料,结果应该是:
""
""
""
123
456
789
Run Code Online (Sandbox Code Playgroud)
为什么即使是迭代器,ranges-v3 也不移动元素 std::move_iterator?
========更新======
我的范围版本是: …
我对引用标准中具体段落的答案感兴趣,而不仅仅是一般意见.
template <class T> struct wrapped
{
wrapped(const T&) {}
};
template <class T> wrapped<T> wrappit(const T& x)
{
return wrapped<T>(x);
}
template <class T> int run_function(const T& x, bool wrapped)
{
if (wrapped) {
return 0;
} else {
return run_function(wrappit(x), true) + 1;
}
}
int main()
{
const int result = run_function(0.5, false);
return result;
}
Run Code Online (Sandbox Code Playgroud) 我看到有关在C程序中有两个main()的其他问题:
我正在使用CodeBlocks
但请考虑这个程序:
void main()
{
void main()
{
printf("hello!");
}
printf("World!");
}
Run Code Online (Sandbox Code Playgroud)
仅打印"世界!".
我在Google上进行了快速搜索,但无法找到与此确切主题相关的任何内容.
随着C++继续朝着更现代化的语言方向发展,包括lambdas,基于循环的范围等,似乎这个问题最终可能会出现,如果还没有的话.
我不知道这怎么可能只是一件好事,并提供在C++/CLI,C#,Java等中证明有用的相同好处.如果有人不想要这种行为,它可能只是使用可编程设置,并使用编译器设置关闭,与禁用标准异常或RTTI的方式相同.
此外,有人建议,但不鼓励人们可以为SIGSEGV创建信号处理程序并从那里抛出异常,以模拟建议的行为.现在,虽然这有点像黑客攻击,并且不能保证在所有平台上都可以工作,但如果可以模拟(非标准)大约10行的相同基本行为,那么在C++中实现空引用异常真的有多难代码?
那么,是否存在任何技术或其他原因导致错误指针访问的异常最终无法成为标准的一部分?
是C或C++中定义的以下代码的结果?
#define FOO
#define BAR defined(FOO)
#if BAR
int x = 1;
#else
int x = 2;
#endif
Run Code Online (Sandbox Code Playgroud) 所有
传统上,在有关C ++的书籍中,甚至在核心准则中,自我分配保护都写为
A& A::operator=(const A& a) {
if (&a != this) {
...
}
return *this;
}
Run Code Online (Sandbox Code Playgroud)
但是在现代C ++中(自C ++-11起),我们有了std :: addressof魔术。
如果我要教给学生现代C ++的所有好处,我是否应该提倡将自赋值检查写成:
A& A::operator=(const A& a) {
if (std::addressof(a) != this) {
...
}
return *this;
}
Run Code Online (Sandbox Code Playgroud)
更笼统的问题-《核心指南》和其他地方应该走这条路吗?
有什么想法吗?评论?
在必须在另一个网站注册,并对用户名(没有空格或特殊字符)达到愚蠢的限制之后,我想知道为什么我们仍然让程序员限制这样的事情.
是否对允许的用户名方法有一致意见?
这里有一些代码示例
class A {
public $attribute1;
public $attribute2;
public $attribute3;
........
public $attributeN;
}
Run Code Online (Sandbox Code Playgroud)
我需要知道我在课堂上可以拥有多少属性.关于这个PSR或phpmd其他标准的说法是什么?
以萌芽为例,我可以拥有"我想要多少",但我需要用PSR和编写它phpmd.我正在寻找这个,但仍然无法找到.
感谢帮助.
我一直想知道这件事,并没有在任何地方找到相关的答案.你有什么线索,为什么C++标准委员会甚至不考虑在未来添加这样一个基本功能?在我看来,为了现在可以使用,每种编程语言都必须实现这些基本的东西:
我很高兴已经决定,C++ 11将至少具有线程,但这对于网络和文件系统来说是如此重要吗?我们都知道这是可能的,比如提升,所以为什么他们不能做出类似的东西呢?
standards ×10
c++ ×6
c ×3
c++11 ×1
c++17 ×1
class ×1
filesystems ×1
flexibility ×1
lambda ×1
networking ×1
php ×1
phpmd ×1
range-v3 ×1
uid ×1
username ×1