小编Nat*_*ohl的帖子

C++ 11 auto:如果得到一个常量引用怎么办?

请看下面的简单代码:

class Foo
{
public:
  Foo(){}
  ~Foo(){}

  Foo(const Foo&){}
  Foo& operator=(const Foo&) { return *this; }
};

static Foo g_temp;
const Foo& GetFoo() { return g_temp; }
Run Code Online (Sandbox Code Playgroud)

我试着auto像这样使用:

auto my_foo = GetFoo();
Run Code Online (Sandbox Code Playgroud)

我希望这my_foo将是一个常量引用Foo,这是函数的返回类型.但是,类型autoFoo,而不是参考.此外,my_foo是通过复制创建的g_temp.这种行为对我来说并不那么明显.

为了获得引用Foo,我需要这样写:

const auto& my_foo2 = GetFoo();
      auto& my_foo3 = GetFoo();
Run Code Online (Sandbox Code Playgroud)

问题:为什么auto推断出GetFoo作为对象的返回类型,而不是引用?

c++ reference auto c++11

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

当父线程终止时,子线程是否退出

我正在使用调用beginthreadex,endthreadex在Visual Studio C++中进行一些多线程编程.

我创建了一个子线程thread1.子线程运行在一个永不退出的函数上,因为它具有无限循环.现在,如果父线程因错误终止或成功完成,子线程是否也会退出?我的疑问是 - 即使在主程序退出后,是否存在子线程仍处于活动状态的情况?

对于linux,这种情况应该怎样?

c++ windows

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

在方法中使用'out'或'ref'参数的正当理由是什么?

我鄙视和参考方法的参数.恕我直言,他们使代码不那么干净,并提供副作用的机会.但我承认,我可能不理解他们的用处,这可能解释了我厌恶的一部分.请问,有人可以解释一个有效的案例或者参考吗?

c#

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

如何正确关闭已创建多个线程的C#应用​​程序?

我正在编写一个GUI应用程序.

应用程序在其生命周期内打开多个线程.其中一个线程正在处理可能来自其他应用程序的事件,因此它会在一段时间(真实)循环中等待从未终止的事件.

用户可以在任何时候关闭应用程序.我想关闭主应用程序打开的所有线程.

我正在使用Process.GetCurrentProcess().Kill(); 目前处理这个问题.

这是一个好的解决方案吗?如果没有,为什么以及什么是处理这个问题的正确方法,如何关闭主应用程序打开的所有线程?

.net c# multithreading winforms

14
推荐指数
1
解决办法
8315
查看次数

在Python中运行平均值

是否有一种pythonic方法来构建包含某些函数的运行平均值列表

在阅读了一篇关于火星人,黑匣子和柯西分布的有趣小块之后,我认为自己计算Cauchy分布的平均值会很有趣:

import math 
import random

def cauchy(location, scale):
    p = 0.0
    while p == 0.0:
        p = random.random()
    return location + scale*math.tan(math.pi*(p - 0.5))

# is this next block of code a good way to populate running_avg?
sum = 0
count = 0
max = 10
running_avg = []
while count < max:
    num = cauchy(3,1)
    sum += num
    count += 1
    running_avg.append(sum/count)

print running_avg     # or do something else with …
Run Code Online (Sandbox Code Playgroud)

python list-comprehension moving-average

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

使用ARC不允许将int隐式转换为NSNumber

在下面的代码我得到错误消息:ARC不允许将'int'隐式转换为'NSNumber*'.

我错了什么?

<pre>
 <code>
  NSDictionary *results = [jsonstring JSONValue];
  NSNumber *success = [results objectForKey:@"success"]; // possible values for "success": 0 or 1

   if (success == 1) { // ERROR implicit conversion of int to NSNumber disallowed with ARC    
   }
 </code>
</pre>
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助或提示!

亲爱的,丹尼尔

objective-c nsnumber ios

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

Visual C++库目录命令行等效项

要使用一些重新编译的库(f.ex.boost chrono),我需要在Visual Studio中的Properties - > VC++ Directories - > Library Directories中指定库文件夹.如何使用命令行实现此目的?我一直在使用/ LIBPATH但我得到链接器错误(LNK1104).

c++ linker command-line compilation

9
推荐指数
1
解决办法
5142
查看次数

防止参数包扩展中的数组衰减

是否可以防止从参数包扩展的参数中的数组到指针衰减?

例如:

#include <iostream>

void foo() {
  std::cout << "empty\n";
}

template <typename T, typename... Rest>
void foo(T &&t, Rest... rest) {
  std::cout << "T, ...\n";
  foo(rest...);
}

template <typename... Rest>
void foo(char *p, Rest... rest) {
  std::cout << "char*, ...\n";
  foo(rest...);
}

template <int N, typename... Rest>
void foo(char (&first)[N], Rest... rest) {
  std::cout << "char[], ...\n";
  foo(rest...);
}

int main() {
  char a[2], b[2], c[2];
  foo(a, b, c);
}
Run Code Online (Sandbox Code Playgroud)

...输出:

char[], ...
char*, ...
char*, ...
empty
Run Code Online (Sandbox Code Playgroud)

如您所见,第一次调用转到基于数组的重载,但后续调用转到基于指针的重载. …

c++ templates c++11

9
推荐指数
2
解决办法
1117
查看次数

如何在C++中操作和表示二进制数

我正在尝试使用一个非常简单的前序遍历算法为霍夫曼树构建一个查找表,但是我正在执行非常基本的位操作.伪代码如下:

void preOrder(huffNode *node, int bit) //not sure how to represent bit
{
  if (node == NULL)
    return;

  (1) bit = bit + 0; //I basically want to add a 0 onto this number (01 would go to 010)
  preOrder(node->getLeft(), bit);
  (2) bit = bit - 0 + 1; //This should subtract the last 0 and add a 1 (010 would go to 011)
  preOrder(node->getRight());


}
Run Code Online (Sandbox Code Playgroud)

我对如何执行第(1)和(2)行定义的操作感到非常困惑

用什么数据类型来表示和打印二进制数?在上面的例子中,我将数字表示为int,但我很确定这是不正确的.另外,如何添加或减去值?我理解&和| 类型逻辑工作,但我对如何在代码中执行这些类型的操作感到困惑.

有人会发一些非常简单的例子吗?

c++ binary

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

在C++中转换为VARIANT类型的简单方法

是否有任何易于使用的,高层次的类或库,让你互动VARIANT的可视化(C S)++?

更具体地讲,我想POD类型(例如之间的转换double,long),字符串(如CString),和容器(如std::vector)和VARIANT秒.例如:

long val = 42;
VARIANT var;
if (ToVariant(val, var)) ...     // tries to convert long -> VARIANT
comObjPtr->someFunc(var);

std::vector<double> vec;
VARIANT var = comObjPtr->otherFunc();
if (FromVariant(var, vec)) ...   // tries VARIANT -> std::vector<double>
Run Code Online (Sandbox Code Playgroud)

我(天真地?)假设与COM一起工作的人一直这样做,所以最有可能是一个方便的库来处理各种转换.但是我能找到的所有内容都是各种各样的包装类,每个类都转换为几种类型:

有没有简单的方法 - 没有切换到Visual Basic - 以避免这种笨拙的内存管理和按位VT_ARRAY | VT_I4代码的噩梦?

相关问题: …

windows variant visual-c++

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