小编non*_*kle的帖子

带负数的模运算

在ac程序中我正在尝试以下操作(只是检查行为)

 x = 5 % (-3);
 y = (-5) % (3);
 z = (-5) % (-3); 

printf("%d ,%d ,%d", x, y, z); 
Run Code Online (Sandbox Code Playgroud)

给我输出为(2, -2 , -2)gcc.我每次都期待一个积极的结果.模数可以为负数吗?任何人都可以解释这种行为吗?

c gcc modulo

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

C++多重继承函数调用歧义

我有一个与C++中的多继承相关的基本问题.如果我有如下所示的代码:

struct base1 {
   void start() { cout << "Inside base1"; }
};

struct base2 {
   void start() { cout << "Inside base2"; }
};

struct derived : base1, base2 { };

int main() {
  derived a;
  a.start();
}
Run Code Online (Sandbox Code Playgroud)

这给出了以下编译错误:

1>c:\mytest.cpp(41): error C2385: ambiguous access of 'start'
1>      could be the 'start' in base 'base1'
1>      or could be the 'start' in base 'base2'
Run Code Online (Sandbox Code Playgroud)

有没有办法能够start()使用派生类对象从特定基类调用函数?

我现在不知道用例但是..仍然!

c++ multiple-inheritance

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

覆盖vs虚拟

在函数前使用虚拟词virtual的目的是什么?如果我想让子类覆盖父函数,我只需声明相同的函数,如void draw(){}.

class Parent { 
public:
    void say() {
        std::cout << "1";
    }
};

class Child : public Parent {
public:
    void say()
    {
        std::cout << "2";
    }
};

int main()
{
    Child* a = new Child();
    a->say();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出为2.

那么,为什么保留字virtual在标题中是必要的say()呢?

谢谢一堆.

c++ virtual overriding function

39
推荐指数
5
解决办法
4万
查看次数

C++中的嵌套NameSpaces

我很困惑在拥有嵌套的命名空间和对象声明时该怎么做.

我正在移植一些链接到具有一些名称空间的静态库的代码.

我在说什么的例子:

namespace ABC {

    namespace XYZ {

        //STUFF
    }
}
Run Code Online (Sandbox Code Playgroud)

在代码中我该怎么做来声明命名空间中的对象XYZ

如果我尝试:

XYZ::ClassA myobject;
Run Code Online (Sandbox Code Playgroud)

要么:

ABC::XYZ::ClassA myobject;
Run Code Online (Sandbox Code Playgroud)

要么:

ABC::ClassA myobject;
Run Code Online (Sandbox Code Playgroud)

我明白了

没有命名类型

错误,即使ClassA确实存在.

什么是合适的?

c++ namespaces

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

如何在STL中合并两个映射并应用冲突函数?

我已经阅读了Merge两个STL贴图问题,虽然它很接近,但我一直在寻找像这里描述的那样的功能.

简而言之,我想将两个std::map实例(具有相同的键和值类型)合并为一个,但需要注意的是,如果对象存在于两个映射中,我想将这些值添加到一起.

是否存在可以执行此操作的现有boost,range-v3std函数?如果没有,那么实现它的最佳方法是什么?

示例代码:

double mergePredicate(double lhs, double rhs)
{
    return lhs + rhs;
}

int main()
{
    std::map<int, double> mapA = { {0, 1.0}, {1, 2.0} };
    std::map<int, double> mapB = { {1, 1.5}, {2, 2.5} };

    // Merge maps in some way...
    merge(mapA, mapB, mergePredicate);

    // result: mapA == { {0, 1.0}, {1, 3.5}, {2, 2.5} }
    for (const auto& p : mapA) { …
Run Code Online (Sandbox Code Playgroud)

c++ merge stdmap

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

链接器脚本 - 将一个部分放在内存区域的末尾

我已经广泛搜索了如何做到这一点并且未能得出答案.

我的内存布局如下:

Fake Address | Section
     0       |  text
     7       |  relocate
    15       |  bss
    23       |  stack
Run Code Online (Sandbox Code Playgroud)

在堆栈的末尾我放置堆.它正在成长,堆栈是我正在使用的ARM芯片的完全下降堆栈.

现在,我想要做的是将一个部分(让我们称之为.persist)放入我的ram内存中.我希望它驻留在RAM的最后,我想将其编程到我的链接器脚本中.但是,此.persist部分的大小不是由我定义的,而是由编译器根据它包含的符号计算的.

到目前为止,我还没有想出一个好办法.因为我知道RAM起始地址和SIZE,如果我知道部分大小,那么计算部分需要去的位置是微不足道的.但是,根据GNU链接器文档(第74页),似乎:

SIZEOF(section)如果已分配该节,则返回指定节的大小(以字节为单位).如果在评估此部分时尚未分配该部分,则链接器将报告错误.

所以我无法计算链接器脚本中部分的大小(因为我想在放置它/分配之前计算大小).

有谁知道这样做的好方法?

c c++ memory linker linker-scripts

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

从Visual Studio Solution生成Make文件(用于GCC)

我想在Linux中使用GCC 编译我的Visual Studio解决方案,有三个项目.该解决方案包含两个DLL项目一个使用这些DLL的应用程序(.EXE)项目.源代码不包含任何Windows依赖项.

如何将解决方案(包含3个项目)转换为可以使用GCC在Linux中编译的文件.

是否有任何工具可以将Visual Studio Solution(Project)转换为make/s.

Visual Studio版本是Visual Studio 2008

c++ linux gcc makefile visual-studio

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

Git不会还原或提交它认为已修改的文件

我按照本教程将SVN存储库转换为Git .现在似乎无法提取此答案中建议的子存储库.

原谅长篇文章,但大部分文本都是格式良好的git输出.

操作系统:Windows 8命令行:MinGW Git版本:1.8.1.msysgit.1

除非您有一个干净的暂存区域且没有修改过的文件,否则提取子存储库的过程似乎不起作用.

git status告诉我,我有一个修改过的文件,即使这是一个新的SVN导入.好吧,让我们试着摆脱它.

尝试并还原文件.

user$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified: folder with space/folder/toolbar.png
#
no changes added to commit (use "git add" and/or "git commit -a")

user$ git checkout -- "folder with space/folder/toolbar.png"

user$ git status …
Run Code Online (Sandbox Code Playgroud)

windows git png mingw msysgit

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

为什么使用xor和文字而不是反转(按位不是)

我遇到过这个CRC32代码,很好奇为什么作者会选择使用它

crc = crc ^ ~0U;
Run Code Online (Sandbox Code Playgroud)

代替

crc = ~crc;
Run Code Online (Sandbox Code Playgroud)

据我所知,它们是等价的.

我甚至在Visual Studio 2010中反汇编了这两个版本.

未优化的构建:

    crc = crc ^ ~0U;
009D13F4  mov         eax,dword ptr [crc]  
009D13F7  xor         eax,0FFFFFFFFh  
009D13FA  mov         dword ptr [crc],eax 

    crc = ~crc;
011C13F4  mov         eax,dword ptr [crc]  
011C13F7  not         eax  
011C13F9  mov         dword ptr [crc],eax  
Run Code Online (Sandbox Code Playgroud)

我也无法通过考虑每条指令所需的周期数来证明代码的合理性,因为两条指令都需要完成1个周期.实际上,xor可能因为必须从某处加载文字而受到惩罚,尽管我不确定这一点.

所以我认为它可能只是描述算法的首选方式,而不是优化......这是正确的吗?

编辑1:

因为我刚刚意识到crc变量的类型可能很重要,我在这里包括整个代码(少了查找表,太大了)所以你不必关注链接.

uint32_t crc32(uint32_t crc, const void *buf, size_t size)
{
    const uint8_t *p;

    p = buf;
    crc = crc ^ ~0U;

    while …
Run Code Online (Sandbox Code Playgroud)

c c++ crc bitwise-operators

11
推荐指数
2
解决办法
879
查看次数

无法在Mac OS X Yosemite上下载XCode 6.1

将我的Mac升级到Yosemite后,我在下载XCode 6.1时遇到了麻烦

我每次尝试时都会收到错误消息:

This item is temporarily unavailable. Try again later.
Run Code Online (Sandbox Code Playgroud)

我以后再试过几天,没有运气.

我发现这个Apple论坛帖子真有帮助,但我不想下载第三方工具.

我通过搜索XCode解决了这个问题:

sudo find / -name *XCode*
Run Code Online (Sandbox Code Playgroud)

返回的是:

/private/var/folders/zn/ltz89cf17wj09s3bz6rnrwyc0000gn/C/com.apple.DeveloperTools/5.0.2-5A3005/Xcode/CachedSpecifications-xcodebuild
/private/var/folders/zn/ltz89cf17wj09s3bz6rnrwyc0000gn/C/com.apple.DeveloperTools/5.1-5B130a/Xcode/CachedSpecifications-xcodebuild
/private/var/folders/zn/ltz89cf17wj09s3bz6rnrwyc0000gn/C/com.apple.DeveloperTools/5.1.1-5B1008/Xcode/CachedSpecifications-xcodebuild
/private/var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/C/com.apple.DeveloperTools/5.0.2-5A3005/Xcode/CachedSpecifications-xcodebuild
/private/var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/C/com.apple.DeveloperTools/5.1-5B130a/Xcode/CachedSpecifications-xcodebuild
/private/var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/C/com.apple.DeveloperTools/5.1.1-5B1008/Xcode/CachedSpecifications-xcodebuild
Run Code Online (Sandbox Code Playgroud)

通过重命名上面的所有com.apple.DeveloperTools文件夹/文件,aaacom.apple.DeveloperTools我设法让我的App Store下载新的XCode.

我想问的是,Yosemite改变了Mac缓存的工作方式吗?

我问这个是因为我注意到有些人没有通过删除通常推荐的文件夹来解决问题com.apple.appstore.我不能说这是否会起作用/因为这是我尝试的第一件事,所以我问的是Mac缓存是否已经改变,如果是这样的话?

编辑1:

我现在才注意到Elliott Slaughter 在同一个帖子中发布了一个非常有用的命令,这个命令比我的命令更常见的缓存删除:

rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/com.apple.appstore"
Run Code Online (Sandbox Code Playgroud)

在我的机器上:

...$ echo $(getconf DARWIN_USER_CACHE_DIR)
/var/folders/zn/ltz89cf17wj09s3bz6rnrwyc0000gn/C/
Run Code Online (Sandbox Code Playgroud)

编辑2:

所以我的假设是删除com.apple.appstore不起作用,因为XCode似乎在com.apple.DeveloperTools文件夹中被引用.我对吗?

macos xcode osx-yosemite

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