小编APr*_*mer的帖子

memory_order_seq_cst和memory_order_acq_rel有何不同?

存储是释放操作,负载是两者的获取操作.我知道这memory_order_seq_cst意味着要为所有操作强加一个额外的总排序,但是我没有建立一个例子,如果所有的操作memory_order_seq_cst都被替换,那就不是这样了memory_order_acq_rel.

我是否会遗漏某些内容,或者差异仅仅是文档效果,即memory_order_seq_cst如果有人打算不使用更轻松的模型并且memory_order_acq_rel在约束轻松模型时使用,则应该使用?

c++ memory-model c++11 stdatomic

30
推荐指数
3
解决办法
6657
查看次数

使用()或不创建对象之间的区别

我刚遇到这个问题

error: request for member ‘show’ in ‘myWindow’, which is of non-class type ‘MainGUIWindow()’
Run Code Online (Sandbox Code Playgroud)

当试图编译一个简单的qt应用程序时:

#include <QApplication>
#include "gui/MainGUIWindow.h"


int main( int argc, char** argv )
{
  QApplication app( argc, argv );


  MainGUIWindow myWindow();
  myWindow.show();


  return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

我通过替换解决了这个问题

MainGUIWindow myWindow(); 
Run Code Online (Sandbox Code Playgroud)

通过

MainGUIWindow myWindow;
Run Code Online (Sandbox Code Playgroud)

但我不明白其中的区别.我的问题:有什么区别?

此致,德克

c++ qt most-vexing-parse

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

如何在C++/CLI中检查对象的类型?

有没有一种简单的方法来检查对象的类型?我需要以下几点:

MyObject^ mo = gcnew MyObject();
Object^ o = mo;

if( o->GetType() == MyObject )
{
    // Do somethine with the object
}
else
{
    // Try something else
}
Run Code Online (Sandbox Code Playgroud)

目前我正在使用嵌套的try-catch块来寻找System::InvalidCastException那些感觉很丑但有效的s.我打算尝试编写类似上面代码的内容,看看它是否更快/更慢/可读但是无法解决语法甚至尝试.

如果有人想知道,这来自于让一个队列进入一个提供数据工作的线程.有时我想更改设置并通过数据队列传递它们是一种简单的方法.

types c++-cli detection

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

为什么我不能在gdb中打印出环境变量?

#include <unistd.h>
#include <stdio.h>

extern char **environ;
int main(int argc, char *argv[]) { 
  int i = 0;
  while(environ[i]) {
    printf("%s\n", environ[i++]);
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我的观点:

(gdb) n
8       printf("%s\n", environ[i++]);
(gdb) p environ[i]
Cannot access memory at address 0x0
(gdb) n
LOGNAME=root
7     while(environ[i]) {
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,printf可以打印出来environ[i],但是p environ[i]给了我Cannot access memory at address 0x0,为什么?

c linux gdb environment-variables

8
推荐指数
2
解决办法
6286
查看次数

PEP-8:文件顶部的模块

为了改善我的Python风格,我在我的一个脚本上运行了一个PEP-8样式检查器,它抱怨我不知道如何修复.脚本的序言如下:

#! /bin/env python3

import sys
import os

exe_name = os.path.basename(os.path.realpath(__file__))
bin_dir = os.path.dirname(os.path.realpath(__file__))
inst_dir = os.path.dirname(bin_dir)
sys.path.insert(0, inst_dir+'/path/to/packages')

import mypackage.mymodule
Run Code Online (Sandbox Code Playgroud)

并且样式检查器在线上抱怨import mymodule,声明它应该是文件的顶部.但在设置找到它的路径之前,我显然无法移动它.有没有一种很好的方法来实现这一点(强制要求环境变量或shell包装器不是我认为比现有代码更好的)同时尊重PEP-8建议?

python pep8

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

库上的静态变量初始化

我正在开发一个将添加类型的工厂,但是,如果该类没有在执行的.exe中明确地被编程(编译时),那么该类型不会添加到工厂中.这是因为静态调用是如何不进行的.有没有人对如何解决这个问题有任何建议?下面是我放入lib的五个非常小的文件,然后一个.exe将调用这个lib.如果有任何关于如何使其工作的建议,或者可能是更好的设计模式,请告诉我.这基本上就是我要找的东西

1)可以采用类型的工厂

2)自动注册进入类.cpp文件,任何和所有注册码都应该在类.cpp中(对于下面的示例,RandomClass.cpp)而没有其他文件.

BaseClass.h:http://codepad.org/zGRZvIZf

RandomClass.h:http://codepad.org/rqIZ1atp

RandomClass.cpp:http://codepad.org/WqnQDWQd

TemplateFactory.h:http://codepad.org/94YfusgC

TemplateFactory.cpp:http://codepad.org/Hc2tSfzZ

c++ static-libraries static-linking

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

具有两个参数的向量构造函数被解析为函数声明

考虑这个例子:

#include <iostream>
#include <string>
#include <vector>
#include <iterator>

int main()
{
    std::string sen = "abc def ghi jkl";
    std::istringstream iss(sen);

    std::vector<std::string>    // declaration in question
    vec(std::istream_iterator<std::string>(iss),
        std::istream_iterator<std::string>());

    std::copy(vec.begin(), vec.end(),
              std::ostream_iterator<std::string>(std::cout, "\n"));
}
Run Code Online (Sandbox Code Playgroud)

编译器在调用时抛出错误 std::copy

request for member 'begin' in 'vec', which is of non-class type...

我可以解决这个错误:

std::istream_iterator<std::string> it_begin(iss);
std::istream_iterator<std::string> it_end;
std::vector<std::string> vec(it_begin, it_end);
Run Code Online (Sandbox Code Playgroud)

或者在每个参数周围加上括号,如下所示:

std::vector<std::string>
vec((std::istream_iterator<std::string>(iss)),
    (std::istream_iterator<std::string>()));
Run Code Online (Sandbox Code Playgroud)

甚至在C++ 11中使用新的统一初始化:

std::vector<std::string> vec { /*begin*/, /*end*/ };
Run Code Online (Sandbox Code Playgroud)

为什么编译器将示例中的声明解析为函数声明?我知道最烦恼的解析,但我认为只有空参数列表才会发生.我也想知道为什么第二种解决方法有效.

c++ parsing stdvector most-vexing-parse

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

为什么char数组必须以null字符结尾

为什么char数组必须以null字符结尾.我有没有理由在每个char数组中添加空字符?


似乎他们得到同样的待遇.

c c++ arrays char

5
推荐指数
2
解决办法
2652
查看次数

二进制搜索列表但不搜索集合

Collection它是:

binarySearch(List list, Object key)
Run Code Online (Sandbox Code Playgroud)

为什么二进制搜索不适用于Set?为什么只是为了List

任何具体原因?

java collections

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

Putty Shift 箭头

我想让 Putty 识别移位箭头序列

正如我所知,例如 ^[[A 表示向上,而 ^[[1;2A 是 shift+up

我修改了腻子源代码如下

            if (shift_state == 1)
                if (app_flg)
                    p += sprintf((char *) p, "\x1BO1;2%c", xkey);
                else
                    p += sprintf((char *) p, "\x1B[1;2%c", xkey);
            else
                if (app_flg)
                    p += sprintf((char *) p, "\x1BO%c", xkey);
                else
                    p += sprintf((char *) p, "\x1B[%c", xkey);
Run Code Online (Sandbox Code Playgroud)

代替

                    if (app_flg)
                        p += sprintf((char *) p, "\x1BO%c", xkey);
                    else
                        p += sprintf((char *) p, "\x1B[%c", xkey);
Run Code Online (Sandbox Code Playgroud)

通过运行 cat -vt putty seams 向终端提供正确的密钥代码,但在 emacs 中,我仍然无法移动选择文本(而是将文本 ;2A 用于向上等)

运行已经包含此修复程序的 begPutty(我也没有它的源代码) cat …

c keyboard emacs terminal putty

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