小编pmr*_*pmr的帖子

std :: common_type的目的是什么?

我开始关注std::common_type并且不确定它的用途和功能.有些事情让我觉得奇怪:

  • 争论的顺序很重要:common_type<Foo, Bar, Baz>可能与之不同common_type<Baz, Foo, Bar>.要么可以编译,要么可能没有.虽然从common_type定义的方式来看这很清楚,但它感觉奇怪且不直观.这是因为缺乏通用解决方案还是打算?
  • 实例化可能导致编译器错误,而不是我可以处理的事情.如何检查是否common_type实际编译?可能是专门的is_convertible还不够common_type
  • 在这样的情况下仍然无法找出常见类型:

    struct Baz;
    struct Bar { int m; };
    struct Foo { int m; }; 
    struct Baz { Baz(const Bar&); Baz(const Foo&); };
    
    Run Code Online (Sandbox Code Playgroud)

    建议的解决方案是专业化common_type,这是繁琐的.有更好的解决方案吗?

有关参考,请参见N3242中的§20.9.7.6表57.

c++ c++11

20
推荐指数
2
解决办法
3299
查看次数

如何在服务器端安排PHP脚本的执行?

我需要一个PHP脚本在特定时间自动执行.我如何实现这一目标?

php

17
推荐指数
3
解决办法
5万
查看次数

为什么size不是std :: initializer_list的模板参数?

std::initializer_list 由编译器从大括号括起的init列表构造,并且该列表的大小必须是编译时常量.

那么为什么委员会决定从模板参数中省略大小呢?这可能会阻止一些优化并使一些事情变得不可能(std::array从a 初始化std::initializer_list).

c++ initializer-list c++11

17
推荐指数
2
解决办法
1874
查看次数

使用XSLT删除XML节点

我有以下XML:

<?xml version="1.0" encoding="utf-8"?>
<Rowsets>
<Rowset>
    <Columns>
        <Column Description="FirstName" MaxRange="1" MinRange="0" Name="FirstName" SQLDataType="12" SourceColumn="FirstName"/>
        <Column Description="LastName" MaxRange="1" MinRange="0" Name="LastName" SQLDataType="12" SourceColumn="LastName"/>
        <Column Description="Phone" MaxRange="1" MinRange="0" Name="Phone" SQLDataType="1" SourceColumn="Phone"/>
    </Columns>
    <Row>
        <FirstName>Michael</FirstName>
        <LastName>David</LastName>
        <Phone>1234567890</Phone>
    </Row>
    <Row>
        <FirstName>David</FirstName>
        <LastName>Michael</LastName>
        <Phone>01234567890</Phone>
    </Row>
    <Row>
        <FirstName>Yang</FirstName>
        <LastName>Christina</LastName>
        <Phone>2345678901</Phone>
    </Row>
    <Row>
        <FirstName>Grey</FirstName>
        <LastName>Meredith</LastName>
        <Phone>3456789012</Phone>
    </Row>
    <Row>
        <FirstName>David</FirstName>
        <LastName>Shepherd</LastName>
        <Phone>5678901234</Phone>
    </Row>
</Rowset>
Run Code Online (Sandbox Code Playgroud)

我想<Phone>从每一行以及列描述中删除节点.

所以我的结果XML将如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Rowsets>
<Rowset>
    <Columns>
        <Column Description="FirstName" MaxRange="1" MinRange="0" Name="FirstName" SQLDataType="12" SourceColumn="FirstName"/>
        <Column Description="LastName" MaxRange="1" MinRange="0" Name="LastName" SQLDataType="12" SourceColumn="LastName"/>
    </Columns> …
Run Code Online (Sandbox Code Playgroud)

xml xslt

17
推荐指数
1
解决办法
3万
查看次数

如何在给定shared_ptr的情况下正确复制对象

我正在尝试复制自定义类的对象Event.我有一个指向我从其分配中获得的对象的共享指针:

std::shared_ptr<Event> e = std::make_shared<Event>();
Run Code Online (Sandbox Code Playgroud)

为了获得e(不仅仅是指针的副本)的真实副本,我尝试过:

std::shared_ptr<Event> o = std::make_shared<Event>(*e);
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否是正确的方式,因为如果我删除e它也会删除o...

顺便说一句,我还没有定义一个拷贝构造函数,Event::Event(const Event &orig)但在我的理解中,这并不是必需的,因为编译器提供了一个默认的拷贝构造函数.事件类只包含变量而没有其他指针.

c++ copy-constructor shared-ptr

17
推荐指数
2
解决办法
3万
查看次数

"运行C++程序时,系统无法找到指定的文件"

我安装了Visual Studio 2010.我编写了一个简单的代码,我确信它是正确的但不幸的是,当我运行代码时,我得到下面的错误.

这是我的代码:

#include<iostream>
using namespace std;
int main (){ 
  cout <<"Hello StackOverFlow ;)";
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是错误:

无法启动程序'C:\ Users\Soheil\Desktop\New folder\sam\Debug\sam.exe系统找不到指定的文件

你能帮我解决这个问题吗?我应该在特定目录中定义项目吗?我花了很多时间来解决这个问题,但还没有取得任何成功.

c++ visual-studio

16
推荐指数
3
解决办法
15万
查看次数

如果成员具有非平凡的noexcept赋值运算符,则默认的移动赋值不能明确地为noexcept

此代码无法使用gcc 4.8.2(-std = c ++ 11)进行编译,但使用clang 3.4(trunk)编译(-std = c ++ 11):

#include <type_traits>
#include <vector>

struct X {
  X& operator=(X&&) noexcept = default;
  // adding noexcept this leads to an error in gcc, but works in clang:
  // function ‘X& X::operator=(X&&)’ defaulted on its first
  // declaration with an exception-specification that differs from the
  // implicit declaration ‘X& X::operator=(X&&)’

  std::vector<char> m;
};

// this assert holds, even without noexcept
static_assert(std::is_nothrow_move_assignable<X>::value, 
              "type-specification violation");

int main()
{
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

static_assert …

c++ assignment-operator move-semantics c++11

15
推荐指数
1
解决办法
2178
查看次数

在doxygen中对重载进行分组

在我的库中,我有很多函数重载的形式:

/// \brief Does thing.
///
/// \details The thing that is done is very special.
template<typename T>
void do_stuff(const T& t);

/// \brief Does thing repeatedly. 
/// \copydetails do_stuff()
template<typename T>
void do_stuff(const T& t, std::size_t x);
Run Code Online (Sandbox Code Playgroud)

这通常是有效的,并且非常好,但是多次创建相同的文档部分.我想要的是将这些功能组合在一起.有详细说明和每个重载注释的简要说明.我也不反对可以做这样的事情或输入过滤器的别名.

我可以想象的一种方式是:

文档结果应如下所示:

template<typename T>
void do_stuff(const T& t);                (1)

template<typename T>
void do_stuff(const T& t, std::size_t x); (2)

The things that is done is very special.

(1) Does thing.

(2) Does thing repeatedly.
Run Code Online (Sandbox Code Playgroud)

当然我可以创建一个新页面并手动编写这种文档,但是它需要我在页面上重复函数声明,然后将链接打到实际的函数文档中,但这比其他任何东西都要糟糕.

有没有办法轻松实现这一目标?甚至暗示将其破解为doxygen也会受到赞赏.

c++ documentation doxygen overloading

14
推荐指数
2
解决办法
3031
查看次数

std :: string copy构造函数不在GCC 4.1.2中?

我想知道我是否误解了某些内容:复制构造函数是否std::string 复制其内容?

string str1 = "Hello World";
string str2(str1);

if(str1.c_str() == str2.c_str()) // Same pointers!
  printf ("You will get into the IPC hell very soon!!");
Run Code Online (Sandbox Code Playgroud)

这将打印出"你很快就会进入IPC地狱!" 它让我烦恼

这是正常的行为std::string吗?我在某处读到它通常会做一个深层复制.

但是,这可以按预期工作:

string str3(str1.c_str());

if(str1.c_str() == str3.c_str()) // Different pointers!
  printf ("You will get into the IPC hell very soon!!");
else
  printf ("You are safe! This time!");
Run Code Online (Sandbox Code Playgroud)

它将内容复制到新字符串中.

c++ gcc deep-copy stdstring copy-constructor

13
推荐指数
2
解决办法
3276
查看次数

建议使用gcc构建C++的-W标志

我一直在寻找对C的警告选项的推荐G ++名单++,只有能找到这样的:对于C推荐GCC警告选项有用的GCC标志对C这些都是非常特定于C

-Wall和-Wextra启用gcc可以生成的大多数但不是全部警告.

哪些选项未启用哪些警告特别是在编译C++时也应该打开?

c++ gcc build-process compiler-warnings

11
推荐指数
1
解决办法
6814
查看次数