小编Vor*_*rac的帖子

根据C11,什么是"字节"?

根据C11标准草案,第1章第3节:

3.6
字节:可寻址的数据存储单元,足以容纳执行环境的基本字符集的任何成员

注1 :可以唯一地表示对象的每个字节的地址.

那么,当我得出结论只有字节可寻址的存储器架构是标准的目标时,我能正确地解释这个吗?或者是我以不正确的方式阅读它?

c c11

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

继承类中字段的顺序是什么?

struct A {int a;};
struct B : A {int b;};
B b;
Run Code Online (Sandbox Code Playgroud)

标准是否保证字段在内存中的排序方式(即字段a排在前面)b并且是否有任何填充?


使用案例。我有class Specificationclass Command。命令对象中包含规范以及一些附加信息。我希望在需要时能够使用任一类型的对象Specification

这个用例非常幼稚 - 请务必阅读问题下面的所有评论。由于其他原因,最初的问题仍然很有趣:指针算术、缓冲区溢出、缓存模式和反编译浮现在脑海中。

memory c++11

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

gnu ld链接整个目标文件还是只链接所需的函数?

我们有一个库和一个可执行文件,它与lib 静态链接.我们希望最小化最终可执行文件的程序空间.

根据avr-libc的文档:

链接器链接在函数所在的整个对象模块中

另一方面,我的同事们一致认为,在某些过程中,链接器会丢弃任何未使用的函数.

那么谁是正确的还是我误解了什么?整个gcc的答案是否一致,还是我们只在这里讨论avr端口?

ld static-libraries avr-gcc

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

GCC是否支持PIC(特别是有问题的PIC16系列)

免费的PIC C编译器
PIC16 C编译器

... aaaaand noone提及gcc.如果PIC适合C,谷歌搜索引导我只在论坛上发生火焰战争,并且他们(至少6系列)30指令汇编程序非常容易学习.

gcc是否支持PIC16?

gcc pic

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

为什么在实例化类时不调用父构造函数?

class A:
    def __init__(self):
        print 'A'


class B(A):
    def __init__(self):
        print 'B'


b = B()
B
Run Code Online (Sandbox Code Playgroud)

在C++中,我本来希望看到A B输出,但在Python中我只是得到了B.我知道我可以super(B, self).__init__()在Python中实现相同的目标,但是因为这显然不是默认的(或者是它 - 我也是语法的新手),我担心安装对象的范例是完全不同的.

那么Python中的对象是什么,它们与类的关系是什么?在Python中所有父类中初始化所有数据的标准方法是什么?

python oop class python-2.7

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

如何设置CMake搜索路径

在我的CMakeLists.txt中

include (CheckFunctionExists.cmake)
Run Code Online (Sandbox Code Playgroud)

当我跑ccmake(我正在遵循官方教程)

 CMake Error at CMakeLists.txt:10 (include):
   include could not find load file:

     CheckFunctionExists.cmake
Run Code Online (Sandbox Code Playgroud)

但是,我指定的文件:

sw3@pc90313-sw3:~/learn_cmake/build$ find / -name CheckFunctionExists.cmake 2>/dev/null
/usr/share/cmake-2.8/Modules/CheckFunctionExists.cmake
Run Code Online (Sandbox Code Playgroud)

我正在使用Ubuntu 13.04存储库的cmake安装:

sw3@pc90313-sw3:~/learn_cmake/build$ cmake --version
cmake version 2.8.10.1
Run Code Online (Sandbox Code Playgroud)

如果指定了绝对路径,那么一切都运行良好,并生成一个工作的makefile.但是,这种解决方法远非理想(并且与教程不同).问题出在哪里?

linux cmake

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

如何访问兼容的 std::variant 变体?

#include <variant>


struct A
{
    void foo(){}
};


struct B
{
    void foo(){}
};

int main()
{
    std::variant< A, B > v{ A{} };
    v.foo();  // doesn't work
}
Run Code Online (Sandbox Code Playgroud)

如何在std::variant不知道其类型但知道其属性的情况下使用该值?我相信这被称为相当于 Duck Typing 的通用多态性。

c++ variant c++20

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

又一个序列点查询:*p ++ = getchar()如何工作?

§5.1.2.4.16

实施例7表达的分组并不完全决定其评估.在以下片段中:

#include <stdio.h>
int sum;
char *p;
/*
...
*/
sum = sum * 10 - '0' + (*p++ = getchar());
Run Code Online (Sandbox Code Playgroud)

表达式语句被分组,就好像它被写为

sum = (((sum * 10) - '0') + ((*(p++)) = (getchar())));
Run Code Online (Sandbox Code Playgroud)

但是p的实际增量可以在前一个序列点和下一个序列点(;)之间的任何时间发生,并且对getchar的调用可以在需要其返回值之前的任何点发生.

所以基本上我把它理解为未指明的行为 - 要么是*p = getchar(); p++;OR p++; *p = getchar().请注意,这;意味着一个序列点,但整个表达式中没有其他序列点.

所以这种语法没用.而且,几乎,++和 - 用于指针分配是没用的.对?

c sequence-points

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

不知道如何为MinGW构建OpenCV

TL; DR;

我正在尝试为MinGW构建OpenCV.cmake虽然我可以使用g ++.exe编译示例代码,但仍然抱怨没有理智的CXX编译器.


长版

我尝试为MinGW找到一个二进制文件,但这不起作用.

我尝试编译MinGW,但是因为sh.exe在路径中的一些错误而失败了.我很困惑,因为重命名文件系统上的目标文件并没有解决问题.

E:\work\opencv\mybuild> cmake -G "MinGW Makefiles" ../sources
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/CMakeMin
GWFindMake.cmake:22 (message):
  sh.exe was found in your PATH, here:


  C:/Users/desuna/AppData/Local/GitHub/PortableGit_054f2e797ebafd44a30203088cd3d
58663c627ef/bin/sh.exe


  For MinGW make to work correctly sh.exe must NOT be in your path.

  Run cmake from a shell that does not have sh.exe in your PATH.

  If you want to use a UNIX shell, then use MSYS Makefiles.

Call Stack (most recent call first):
  CMakeLists.txt:56 …
Run Code Online (Sandbox Code Playgroud)

c++ opencv cmake

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

`a?b:c` 的操作数可以有不同的类型吗?最好的选择是什么?

#include <iostream>
#include <string>


struct Base
{
    Base(int)
    {
        std::cout << "int\n";
    }

    Base(std::string)
    {
        std::cout << "string\n";
    }
};


struct S : Base
{
    S(bool b)
    : Base{ b ? int{} : std::string{} }
    {}
};


int main()
{
    S(42);
    S("fortytwo");
}
Run Code Online (Sandbox Code Playgroud)

这段代码有几个编译错误,但更有趣的是

?: 的操作数有不同的类型:int 和 std::string。

约束:

  • Base ctor 初始化常量,所以我不能使用 ctor 主体。
  • 这是唯一一个具有bool魔力的派生类,因此更改Base以适应它是......不可取的。

现在怎么办?这段代码的重点是派生类S调用Base基于 a的重载构造函数之一bool

考虑的解决方案:

  • 一个IIFE能够工作,但相当难看且长。
  • 辅助函数 - 相同。
  • 模板 S 并传递到b那里 - …

c++ if-statement initialization c++20

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