小编Amo*_*mum的帖子

C++ 11,14,17或20是否为pi引入了标准常量?

C和C++中的数字pi存在一个相当愚蠢的问题.据我知道M_PI的定义math.h是没有任何标准要求.

新的C++标准在标准库中引入了许多复杂的数学 - 双曲函数,std::hermite以及std::cyl_bessel_i不同的随机数生成器等等.

是否有任何"新"标准为pi带来了一个常数?如果没有 - 为什么?没有它,所有这些复杂的数学如何运作?

我知道关于C++中pi的类似问题(它们已经有几年了,而且标准已经很久了); 我想知道问题的当前状态.

我也非常感兴趣为什么 C++仍然没有pi常量,但有很多更复杂的数学.

UPD:我知道我可以将自己定义为4*atan(1)或acos(1)或double pi = 3.14.当然.但为什么在2018年我仍然必须这样做?没有pi,标准数学函数如何工作?

c++ language-lawyer c++11 c++14 c++17

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

为什么每个人都会在标准C类型上输入类型?

如果你想使用Qt,你必须拥抱quint8,quint16等等.

如果你想使用GLib,你必须欢迎guint8,guint16等等.

Linux上有u32,s16等等.

uC/OS定义SINT32,UINT16等等.

如果你必须使用这些东西的某些组合,你最好为困难做好准备.因为在你的机器上u32将会typedef结束long并且quint32typedef结束int并且编译器会抱怨.

为什么每个人都这样做,如果有的话<stdint.h>?这是图书馆的某种传统吗?

c c++ stdint

103
推荐指数
3
解决办法
5727
查看次数

为琐碎的对象在“ this”上调用新的展示位置是否安全?

我知道这个问题已经被问过好几次了,但是我找不到针对这种情况的答案。

假设我有一个琐碎的类,它不拥有任何资源,并且具有空的析构函数和默认构造函数。它具有少数带有类内初始化的成员变量;没有一个是const

我想重新初始化和此类对象,而无需deInit手动编写方法。这样做是否安全?

void A::deInit()
{
  new (this)A{};
}
Run Code Online (Sandbox Code Playgroud)

我看不到任何问题-对象始终处于有效状态,this仍然指向同一地址;但是它是C ++,所以我想确定。

c++ placement-new

20
推荐指数
2
解决办法
810
查看次数

自定义HID设备HID报告描述符

我在生成HID描述符时遇到了一些问题.我想使用ID1作为输入的简单报告,使用ID2作为64字节数据的输出.

我意识到尽管rtfming和谷歌搜索我仍然没有关于HID描述符中的一些字段的线索.

有人可以给我一个提示或手册,我可以找到所有描述符字段的含义吗?我所能找到的只是HID-mouse/joistick/keyboard的例子.

例如 - REPORT_SIZE - 是以字节还是以位为单位的大小?为什么还有REPORT_COUNT?如果报告中有64个字节,LOGICAL_MAXIMUM必须是255或255*64?

我应该为每个报告写LOGICAL_MAX和MIN吗?

或者这个(通过猜测生成)就足够了?

char ReportDescriptor[39] = {
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x09, 0x00,                    // USAGE (Undefined)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x85, 0x01,                    //   REPORT_ID (1)
    0x09, 0x00,                    //   USAGE (Undefined)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
    0x75, 0x40,                    //   REPORT_SIZE (64)
    0x96, 0x00, 0x02,              //   REPORT_COUNT (512)
    0x81, 0x82,                    //   INPUT (Data,Var,Abs,Vol)
    0x85, 0x02,                    //   REPORT_ID (2)
    0x09, 0x00,                    //   USAGE (Undefined)
    0x15, 0x00,                    // …
Run Code Online (Sandbox Code Playgroud)

usb hid

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

什么是Vec <_>?

我已经见过Vec<_>几次了.例如:

let a = "line1\r\nline2\nline3";
println!("{:?}", a.lines().collect::<Vec<_>>());
Run Code Online (Sandbox Code Playgroud)

但那个"不确定的面孔" <_>是什么意思呢?

我已习惯尖括号中的类型名称,但这可以是什么类型?我所知道的下划线的唯一含义是来自Python作为未使用变量的名称.

generics rust

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

IntelliJ IDE中的Junit测试无法查看测试类

我在IntelliJ中创建了一个简单的Java项目,一个类(RandomizedQueue)并为它生成了JUnit测试类.所以它只是两个文件,它们都在同一个目录中--src.

编译的一切都很好.一段时间 然后突然 - 它停止了这个错误:

java: cannot find symbol
  symbol:   class RandomizedQueue
  location: class RandomizedQueueTest
Run Code Online (Sandbox Code Playgroud)

我尝试了我能想到的一切.重新创建项目已经工作了一段时间,但同样的错误再次出现(没有任何明显的原因).我在这里找不到任何逻辑!从cmd编译确实有效.

我尝试从类和测试中删除所有内容 - 我仍然无法在测试方法中创建实例.

这是整个项目

java junit intellij-idea

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

如何抑制第三方源文件中的警告?

我熟悉GCC和Keil的警告抑制pragma(它们不同,但用法几乎相同).对于第三方标题,我可以这样做:

#pragma push
#pragma suppress warning
#include "whatever.h"
#pragma pop
Run Code Online (Sandbox Code Playgroud)

但是,如何抑制来自第三方来源的警告?Eclipse + GCC和Keil都会生成它们.我提出的唯一解决方案是制作whapper .c文件,其中包含其他.c文件,这似乎是非常脏的技巧.

还有其他解决方案吗?

c c++ eclipse gcc keil

10
推荐指数
1
解决办法
1001
查看次数

将uint8_t与数字进行比较

也许我不正确理解C++或者它是编译器的错误?

uint8_t a = 0x00;
uint8_t b = 0xFF;

if( a - b == 1 )
{
    doNothing();
}
Run Code Online (Sandbox Code Playgroud)

doNothing未被调用(如预期的那样),因为(ab)的结果在比较操作中被隐式地转换为第二个操作数的类型.对于数字,它是签名int.好的.

if( a - b == (uint8_t)1 )
{
    doNothing();
}
Run Code Online (Sandbox Code Playgroud)

doNothing STILL没有被调用,但现在我不明白它的原因!我已经明确地将数字转换为uint8!

if( (uint8_t)(a - b) == 1 )
{
    doNothing();
}
Run Code Online (Sandbox Code Playgroud)

现在doNothing终于被召唤了,但为什么呢?如何减去两个uint8返回一个int?

编译器是用于ARM Cortex M3的uVision ARMCC.

c c++ keil

10
推荐指数
1
解决办法
6775
查看次数

如何使用虚方法为具有非平凡成员的匿名联合编写operator =

C++ 11使我们能够创建具有非平凡成员的匿名联合.这有时非常有用 - 例如,如果我想为没有默认ctor的某些非平凡对象创建Holder类.
让我们通过给它一个虚拟方法让这个NonTrivial对象更有趣:

#include <stdint.h>
#include <stdio.h>

struct Base
{
    virtual void something() { printf("something\n"); }
};

struct NonTrivial : Base 
{
    explicit NonTrivial( int ) : a(1), b(2), c(3), d(4) { printf("NonTrivial\n"); }

    virtual void something() override { printf("something non trivial\n"); }

    int a;
    int b;
    int c;
    int d;
};

struct Holder
{
    Holder() : isNonTrivial(false), dummy(0x77) {}

    Holder( NonTrivial n) : isNonTrivial(true), nonTrivial( n ) {}

    bool isNonTrivial;
    union
    {
        int dummy;
        NonTrivial nonTrivial;
    }; …
Run Code Online (Sandbox Code Playgroud)

c++ unions c++11

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

当一个简单的`assert`足够时,为什么`assert_eq`和`assert_ne`存在?

assert!(a == b)assert_eq!(a, b)我更少的字符,在我看来,更具可读性.

错误消息或多或少相同:

thread 'main' panicked at 'assertion failed: `(left == right)` (left: `1`, right: `2`)', src\main.rs:41
Run Code Online (Sandbox Code Playgroud)

要么

thread 'main' panicked at 'assertion failed: 1 == 2', src\main.rs:41
Run Code Online (Sandbox Code Playgroud)

实际上,这个问题不仅仅是关于Rust; 我一直在单元测试框架中看到这些不同的断言宏或函数:

  • Cpputest具有CHECKCHECK_FALSECHECK_EQUAL等;
  • Googletest有EXPECT_GTEXPECT_EQ等;
  • JUnit的拥有assertEqualsassertFalse做的.

通常还有一些特定类型的断言,如字符串或数组.重点是什么?

unit-testing assert rust

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