小编Ant*_*ams的帖子

在 C++17 中初始化后可以更改内联变量吗?

我的场景如下(它在 clang 中有效,但在 gcc 中无效)

liba.hpp:

inline int MY_GLOBAL = 0;
Run Code Online (Sandbox Code Playgroud)

libother.cpp: (dll)

#include "myliba.hpp"

void myFunc() {
    //
    MYGLOBAL = 28;
}
Run Code Online (Sandbox Code Playgroud)

一些exe.cpp:

RunAppThatUsesBothLibAandLibOther();
Run Code Online (Sandbox Code Playgroud)

问题是内联变量在我预期为 28 的地方显示为 0,因为它在运行时已被修改。MSVC 不同意这一点,但 clang 做了我期望的事情。

问题是:在我的场景中可以在运行时修改内联变量吗?(我通过反内联变量解决了这个问题。)

c++ dll clang visual-c++ c++17

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

客户端断开连接后在.NET 4中重用NamedPipeServerStream时BeginWaitForConnection抛出的异常

我正在尝试使用NamedPipeServerStream.Net 4中创建命名管道服务器.我正在BeginWaitForConnection等待连接,以便我可以在服务器关闭时中止等待.

一切都适用于第一个客户端---确认连接,收到数据,发送响应正常.但是,在客户端断开连接后,一切都会中断.我BeginWaitForConnection再次呼吁等待一个新的连接,但这是一个IOException说"管道坏了" 的说法.

我怎样才能在同一个管道上等待第二个客户端?

.net named-pipes

5
推荐指数
1
解决办法
2352
查看次数

ISO C++草案(n3290)中的一点:3.4.3.2/1命名空间成员

ISO C++草案(n3290)中的一点:3.4.3.2/1命名空间成员

如果qualified-id的nested-name-specifier指定了名称空间,则在名称空间的范围内查找在嵌套名称说明符之后指定的名称.如果qualified-id以::开头,则在全局命名空间中查找::之后的名称.在任何一种情况下,都会在发生整个后缀表达式的上下文中查找template-id的template-argument中的名称.

这里可以解释一下BOLD部分......以及从早期的c ++ 03草案到c ++ 0x草案他补充道

如果qualified-id以::开头,则在全局命名空间中查找::之后的名称.

任何人都可以用示例程序解释一下

c++ namespaces c++11

4
推荐指数
2
解决办法
159
查看次数

如何在c ++中将剪贴板文本分配给变量?

我写了一个突出数字并复制它们的程序.我希望能够使用复制的文本进行一些基本的数学运算,例如乘法或加法,但我无法弄清楚如何将剪贴板数据分配给变量.基本上,我希望能够复制一个数字,将其分配给变量"a",然后用变量"b"重复并将两者相乘.我已经找到了如何选择和复制数字,以便该部分不是问题.任何帮助都会受到赞赏,即使是与我尝试过的完全不同的方法.

以下是我对此问题的最新尝试:

    HANDLE clip0;
    OpenClipboard(NULL);
    EmptyClipboard();
        clip0 = GetClipboardData(CF_TEXT);
     variable = (char)clip0;
    CloseClipboard();
Run Code Online (Sandbox Code Playgroud)

其中"变量"是变量.

每当我运行程序并告诉它输出"variable"时,它返回值0.

我做的另一个尝试是:

HANDLE clip1;
    if (OpenClipboard(NULL)) 
        clip1 = GetClipboardData(CF_TEXT);
     variable = (char)clip1;
    CloseClipboard();
Run Code Online (Sandbox Code Playgroud)

但"变量"总是采用-8的值

c++ variables clipboard winapi assign

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

提升线程串行运行,而不是并行运行

我是C++中多线程的完全新手,并决定从Boost Libraries开始.另外,我在Vista上使用英特尔的C++编译器(来自Parallel Studio 2011)和VS2010.

我正在编写一个遗传算法,并希望利用多线程的好处:我想为人口中的每个人(对象)创建一个线程,以便他们并行计算他们的适应度(重度操作),减少总执行时间.

据我所知,每当我启动一个子线程时,它就会"在后台"工作,而父线程继续执行下一条指令,对吧?所以,我想到创建并启动我需要的所有子线程(在for循环中),然后等待它们完成(join()在另一个for循环中调用每个线程),然后再继续.

我面临的问题是第一个循环不会继续下一次迭代,直到新创建的线程完成工作.然后,第二个循环就像去了一样好,因为所有的线程都已经被循环命中时加入了.

这是(我认为是)相关的代码片段.告诉我你还有什么需要知道的.

class Poblacion {
    // Constructors, destructor and other members
    // ...
    list<Individuo> _individuos;
    void generaInicial() { // This method sets up the initial population.
        int i;
        // First loop
        for(i = 0; i < _tamano_total; i++) {
            Individuo nuevo(true);
            nuevo.Start(); // Create and launch new thread
            _individuos.push_back(nuevo);
        }

        // Second loop
        list<Individuo>::iterator it;
        for(it = _individuos.begin(); it != _individuos.end(); it++) {
            it->Join();
        }

        _individuos.sort();
    }
}; …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing multithreading boost-thread

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