小编doc*_*doc的帖子

将内联关键字与模板一起使用是否有意义?

由于模板是在头文件中定义的,编译器能够确定内联函数是否有利,它是否有意义?我听说现代编译器更好地知道何时内联函数并忽略inline提示.


编辑:我想接受这两个答案,但这是不可能的.为了解决这个问题,我接受了菲涅耳的回答,因为它收到了大多数选票并且他是正式的,但正如我在评论中所提到的,我从不同的角度考虑Puppy组件10的答案也是正确的. .

问题出在C++语义中,在inline关键字和内联的情况下并不严格.Phresnel说"如果你的意思是写内联",但实际意义inline并不明确,因为它从原来的意义演变为"阻止编译人员讨论ODR违规"的指令,正如Puppy所说.

c++ templates inline

110
推荐指数
3
解决办法
6万
查看次数

如何在Windows上使线程睡眠时间小于一毫秒

在Windows上我遇到了一个我从未在Unix上遇到过的问题.这是如何使线程休眠不到一毫秒.在Unix上,您通常有许多选择(睡眠,睡眠和纳米睡眠)以满足您的需求.但是,在Windows上,只有Sleep具有毫秒级的粒度.

在Unix上,我可以使用select系统调用来创建一个非常简单的微秒睡眠:

int usleep(long usec)
{
    struct timeval tv;
    tv.tv_sec = usec/1000000L;
    tv.tv_usec = usec%1000000L;
    return select(0, 0, 0, 0, &tv);
}
Run Code Online (Sandbox Code Playgroud)

如何在Windows上实现相同的目标?

c++ windows winapi sleep

53
推荐指数
10
解决办法
8万
查看次数

为什么C/C++的"#pragma once"不是ISO标准?

我目前正在开展一个大型项目并且维护所有这些包括警卫让我疯狂!手工编写是令人沮丧的浪费时间.虽然许多编辑可以生成包含警卫,但这并没有多大帮助:

  1. 编辑器根据文件名生成保护符号.如果在不同目录中具有相同文件名的标头,则会出现此问题.他们两个都会得到相同的包括后卫.将目录结构包含在保护符号中需要编辑器的一些奇特的方法,因为宏中的斜杠和反斜杠不是最好的.

  2. 当我必须重命名文件时,我应该重命名所有包含警戒(在ifndef中,定义和理想的endif的注释).烦人.

  3. 预处理器充斥着大量的符号,而不知道它们的含义.

  4. 然而,定义包含一次,编译器每次遇到标题包含时仍会打开标题.

  5. 包含防护不适合命名空间或模板.实际上他们正在颠覆命名空间!

  6. 你的守卫符号有可能不是唯一的.

当程序在单个目录中包含少于1000个标头时,它们可能是可接受的解决方案.但是现在呢?它很古老,与现代编码习惯无关.令我困扰的是,这个问题几乎可以通过#pragma once指令完全解决.为什么不是标准?

c c++ pragma include-guards

50
推荐指数
4
解决办法
7900
查看次数

scipy.cluster.hierarchy教程

我试图理解如何操纵层次结构集群,但文档太......技术性?......我无法理解它是如何工作的.

是否有任何教程可以帮助我开始,逐步解释一些简单的任务?

假设我有以下数据集:

a = np.array([[0,   0  ],
              [1,   0  ],
              [0,   1  ],
              [1,   1  ], 
              [0.5, 0  ],
              [0,   0.5],
              [0.5, 0.5],
              [2,   2  ],
              [2,   3  ],
              [3,   2  ],
              [3,   3  ]])
Run Code Online (Sandbox Code Playgroud)

我可以轻松地完成层次结构聚类并绘制树形图:

z = linkage(a)
d = dendrogram(z)
Run Code Online (Sandbox Code Playgroud)
  • 现在,我如何恢复特定群集?让我们说[0,1,2,4,5,6]树状图中有元素的那个?
  • 我怎样才能找回那些元素的价值?

python hierarchical-clustering scipy

33
推荐指数
1
解决办法
4万
查看次数

当abort()比exit()更受欢迎时?

我知道两者之间的差异.一个值得注意的事情是abort()发送SIGABRT信号,因此当您的软件依赖它们时它可能是相关的.但是对于一个典型的应用程序exit()似乎是更安全的abort()版本......?使用abort()而不是exit()还有其他问题吗?

c c++ exit abort

24
推荐指数
3
解决办法
4971
查看次数

为什么PHP脚本在Web浏览器中不起作用?

我们在StackOverflow上看到了很多问题,这些问题建立在PHP像Javascript一样的基础上.如果该人明显不理解PHP是Preproccessor并且仅在页面发送之前有效.

一个明显的例子是在下面的代码中,runCommand()当用户按下按钮时不会运行.

<a href="<?php runCommand(); ?>">Click Me!</a>
Run Code Online (Sandbox Code Playgroud)

就像在Javascript中一样

<a href="javascript:runCommand();">Click Me!</a>
Run Code Online (Sandbox Code Playgroud)

我见过很多这样的问题来自新人,他们根本就没有意识到PHP的运作方式.

我的问题是:解释PHP如何工作的优秀资源在哪里?.

我希望能够将人们重定向到一个页面,这个页面可以让他们走上正确的轨道并知道Preproccessor意味着什么.

(这也让我变得懒惰,每次出现时都不必写一个解释,但不要告诉任何人!)

如果你不知道一个描述这个的地方,请随意提供自己的解释.

正如Carl Smotricz指出的那样,PHP的一部分可以在浏览器之外使用.但我主要是在一个Apache环境中讨论用户请求网页,并希望通过HTML获得回报.

php

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

类体外的模板定义

可以在其体外定义类模板的虚函数吗?虚函数不能内联,但为了避免编译单元中的多个定义,应标记它们inline(假设模板头将包含在多个源文件中).另一方面,编译器可以自由忽略inline,因此这似乎是有效的.举个例子,下面的代码是正确的:

template <typename T>
class C
{
public:
    virtual void f(T val);
};

template <typename T>
inline
void C<T>::f(T val)
{
  //definition
}
Run Code Online (Sandbox Code Playgroud)

BTW gcc(3.4.2)允许inline在定义函数f(T val)之前省略,但不能在常规类的类似函数之前省略.这只是gcc的行为吗?

c++ virtual templates inline

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

删除vs运算符删除(和void指针)

是否delete ptr不同于operator delete(ptr)仅在于此,即delete调用ptr析构函数?或者换句话说,delete ptr首先调用析构函数ptr然后operator delete(ptr)释放已分配的内存吗?然后在delete ptr技术上等同于以下内容:

T * ptr = new T;

//delete ptr equivalent:
ptr->~T();
::operator delete(static_cast<void *>(ptr));
Run Code Online (Sandbox Code Playgroud)

c++ destructor void-pointers delete-operator

13
推荐指数
1
解决办法
1519
查看次数

STL容器是否设计为允许继承?

可能重复:
是否可以从STL容器继承实现,而不是委托?

我的问题与为什么STL容器没有虚拟析构函数有关?有些人(包括前一个问题的作者)确信没有虚拟dtor意味着类不可继承.我对这样一个强烈的声明持怀疑态度,所以我要求提供来源或一些推理,但大多数受访者保持沉默.也没有人回答我的回答

因此,我认为质疑前一个问题中的假设并澄清这个重要问题是个好主意.STL容器是否设计为允许继承?更一般地说:继承需要虚拟析构函数吗?

c++ inheritance destructor stl

12
推荐指数
1
解决办法
2497
查看次数

std :: vector元素中的const引用

它只是我的编译器还是禁止在std :: vector元素中使用cons引用.考虑以下结构:

struct Y
{
  const int & x;

  Y(const int & p_x):
        x(p_x)
  {
  }
};
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试将这样的对象推送到vector时:

std::vector<Y> yv;
int x = 5;
Y y(x);
yv.push_back(y);
Run Code Online (Sandbox Code Playgroud)

我得到编译器错误:"错误:非静态引用成员`const int&Y :: x',不能使用默认赋值运算符".不应该复制ctor就够了吗?

c++ stl const reference vector

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