标签: standards

为什么即使迭代器是 std::move_iterator,ranges-v3 也不移动元素?

#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

========更新======

我的范围版本是: …

c++ standards rvalue-reference move-semantics range-v3

-1
推荐指数
1
解决办法
135
查看次数

这是合法的C++代码吗?

我对引用标准中具体段落的答案感兴趣,而不仅仅是一般意见.

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++ standards

-2
推荐指数
1
解决办法
201
查看次数

C:程序中可以有两个main()函数吗?

我看到有关在C程序中有两个main()的其他问题:

我正在使用CodeBlocks

但请考虑这个程序:

void main()
{
    void main()
    {
        printf("hello!");
    }
    printf("World!");

}
Run Code Online (Sandbox Code Playgroud)

仅打印"世界!".

  • 我实际上正在编写这些代码片段以检查引擎盖下发生了什么.
  • 我通过编写奇怪的代码以某种方式得到怀疑(因为我在我的程序中得到错误和意外的行为),但我不知道为什么他们发生了
  • 我可以参考C语言的参考吗?提前致谢.

c standards

-2
推荐指数
1
解决办法
7541
查看次数

抛弃错误指针访问的异常会成为C++中的标准行为吗?

我在Google上进行了快速搜索,但无法找到与此确切主题相关的任何内容.

随着C++继续朝着更现代化的语言方向发展,包括lambdas,基于循环的范围等,似乎这个问题最终可能会出现,如果还没有的话.

我不知道这怎么可能只是一件好事,并提供在C++/CLI,C#,Java等中证明有用的相同好处.如果有人不想要这种行为,它可能只是使用可编程设置,并使用编译器设置关闭,与禁用标准异常或RTTI的方式相同.

此外,有人建议,但不鼓励人们可以为SIGSEGV创建信号处理程序并从那里抛出异常,以模拟建议的行为.现在,虽然这有点像黑客攻击,并且不能保证在所有平台上都可以工作,但如果可以模拟(非标准)大约10行的相同基本行为,那么在C++中实现空引用异常真的有多难代码?

那么,是否存在任何技术或其他原因导致错误指针访问的异常最终无法成为标准的一部分?

c++ standards

-2
推荐指数
1
解决办法
378
查看次数

可以为#define分配已定义的结果吗?

是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 c++ standards c-preprocessor

-2
推荐指数
1
解决办法
171
查看次数

我们应该采用新的自我分配保护方式吗?

所有

传统上,在有关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)

更笼统的问题-《核心指南》和其他地方应该走这条路吗?

有什么想法吗?评论?

c++ standards c++11 c++17

-2
推荐指数
1
解决办法
146
查看次数

您允许用户创建uids有多大的灵活性?

在必须在另一个网站注册,并对用户名(没有空格或特殊字符)达到愚蠢的限制之后,我想知道为什么我们仍然让程序员限制这样的事情.

是否对允许的用户名方法有一致意见?

standards user-interface flexibility username uid

-3
推荐指数
1
解决办法
77
查看次数

新的C11标准是否支持lambdas?

我们知道C++ 11确实有lambda但是C11吗?

c lambda standards

-3
推荐指数
1
解决办法
186
查看次数

根据标准建议在课堂上允许多少属性

这里有一些代码示例

class A {
    public $attribute1;
    public $attribute2;
    public $attribute3;
    ........
    public $attributeN;
}
Run Code Online (Sandbox Code Playgroud)

我需要知道我在课堂上可以拥有多少属性.关于这个PSRphpmd其他标准的说法是什么?

以萌芽为例,我可以拥有"我想要多少",但我需要用PSR和编写它phpmd.我正在寻找这个,但仍然无法找到.

感谢帮助.

php standards class phpmd

-10
推荐指数
1
解决办法
416
查看次数

为什么c ++标准仍然不包括文件系统和网络?

我一直想知道这件事,并没有在任何地方找到相关的答案.你有什么线索,为什么C++标准委员会甚至不考虑在未来添加这样一个基本功能?在我看来,为了现在可以使用,每种编程语言都必须实现这些基本的东西:

  1. 多线程
  2. 联网
  3. 文件系统
  4. GUI

我很高兴已经决定,C++ 11将至少具有线程,但这对于网络和文件系统来说是如此重要吗?我们都知道这是可能的,比如提升,所以为什么他们不能做出类似的东西呢?

c++ filesystems networking standards

-11
推荐指数
2
解决办法
579
查看次数