小编Arc*_*hie的帖子

在C++中有符号整数溢出仍然是未定义的行为吗?

众所周知,有符号整数溢出是未定义的行为.但是C++ 11 cstdint文档中有一些有趣的东西:

有符号整数类型,宽度分别为8,16,32和64位,没有填充位,负值使用2的补码(仅当实现直接支持该类型时提供)

见链接

这里是我的问题:由于标准明确地说,对int8_t,int16_t,int32_tint64_t负数是2的补,仍然是这些类型的未定义行为的泛滥?

编辑我检查了C++ 11和C11标准,这是我发现的:

C++ 11,§18.4.1:

标题定义了所有函数,类型和宏,与C标准中的7.20相同.

C11,§7.20.1.1:

typedef名称intN_t指定有符号整数类型,其宽度为N,无填充位和二进制补码表示.因此,int8_t表示这样的带符号整数类型,其宽度恰好为8位.

c++ integer-overflow undefined-behavior c++11

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

为什么解除引用运算符(*)也用于声明指针?

我不确定这是否是一个正确的编程问题,但它总是困扰我,我想知道我是否是唯一的.

在最初学习C++时,我理解了引用的概念,但指针让我感到困惑.你为什么问?因为你如何声明一个指针.

考虑以下:

void foo(int* bar)
{
}


int main()
{
    int x = 5;
    int* y = NULL;

    y = &x;
    *y = 15;     
    foo(y);

}
Run Code Online (Sandbox Code Playgroud)

该函数foo(int*)int指针作为参数.由于我已经声明yint指针,我可以传递yfoo,但是当我第一次学习C++时,我将*符号与解除引用相关联,因此我认为int需要传递一个解引用.我会试图通过*y进入foo,这显然是行不通的.

用一个单独的运算符来声明指针会不会更容易?(或用于解除引用).例如:

void test(int@ x)
{
}
Run Code Online (Sandbox Code Playgroud)

c++ syntax pointers notation dereference

53
推荐指数
6
解决办法
6195
查看次数

Google Go语言中的异常处理

我想知道...我前段时间读过关于Go的内容,我试图在其中编写一些东西.我觉得很有意思.但是我已经用这种语言处理了"例外".我已经阅读了他们的方法,这似乎是合理的.我想知道标准特殊方法相比Go的风格有什么优势?优缺点都有什么?

编辑直截了当:我不想对异常进行任何神圣的战争.我只是想知道这种处理错误的风格是否有任何优势?与标准例外相比,这种风格的实际优势是什么?值得怀疑的是什么?

exception-handling go

29
推荐指数
1
解决办法
7805
查看次数

为什么C++ lambda在多次调用时比普通函数慢?

我只是试图比较C++ 11中lambda表达式的性能,所以我做了测试 - 计算double值向量中元素的总和.这是实施:

#include <vector>
#include <algorithm>
#include <iostream>
#include <ctime>

#define LOG(x) { std::cout << #x << " = " << (x) << "\n"; }
#define TIME(t) { std::cout << ((double)(clock() - (t)) / CLOCKS_PER_SEC) << " s\n"; }

double sum(const std::vector<double>& v)
{
    double s = 0.0;
    for (auto i = v.cbegin(); i != v.cend(); ++i)
        s += *i;
    return s;
}

int main()
{
    const size_t MAX = 1; // number of tests
    const …
Run Code Online (Sandbox Code Playgroud)

c++ performance lambda c++11

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

Springboot 使用 find*() 查询时出现 Mongodb 错误

我收到以下错误:

在 com.aks.springStorage.SpringStorageApplication.main(SpringStorageApplication.java:22) [classes/:na]
引起:org.springframework.data.mongodb.UncategorizedMongoDbException:查询失败,错误代码 2 和错误消息“字段'区域设置'在以下情况下无效:{ locale: "company" }' on server localhost:27017; 嵌套异常是 com.mongodb.MongoQueryException:查询失败,错误代码 2 和错误消息 'Field 'locale' is invalid in: { locale: "company" }' on server localhost:27017

奇怪的是我没有在公司集合中使用任何像“语言环境”这样的变量。我能够插入并能够获得计数,但是 findAll* 都没有工作,得到相同的错误。

public interface CompanyRepository extends MongoRepository<Company, String> {
    List<Company> findByName(String name);

    @Query("{'contact.address': ?0}")
    List<Company> findByAddress(String address);
}

@Document(collation = "company")
public class Company {
    private int id;
    private String name;
    private List<Product> products;
    private Contact contact;

    public Company(int id, String name, List<Product> products, Contact contact) {
        this.id = id; …
Run Code Online (Sandbox Code Playgroud)

mongodb spring-boot

11
推荐指数
3
解决办法
5355
查看次数

Guice无法实例化扩展JPanel的类 - NPE在调用超级构造函数时

我们有一个桌面Swing应用程序,带有Google Guice 4.1.0依赖注入.在开发过程中一切都运行良好,但是当同事试图运行应用程序时发生了一些奇怪的事情.

我们有一个MainWindow课程延伸JPanel.在构造函数中,此类采用一些本身可注入的控制器.在主要方法中,创建了Guice注入器.然后注入器尝试实例化MainWindow(injector.getInstance(MainWindow.class)).它失败了NullPointerException!

这不会发生在我的计算机上,我们使用相同的JDK.

这里的MainWindow类被剥离到有问题的代码(注意:不幸的是,这不会重现问题):

class MainWindow extends JPanel {
    private final Foo foo;

    private final JFrame frame;

    @Inject
    public MainWindow(Foo foo) {
        super(new GridBagLayout()); // <-- NullPointerException
        this.foo = foo;
        this.frame = new JFrame("title");
    }

    public void createAndShowGUI() {
        // ...
        frame.add(this);
        frame.pack();
        frame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是main()方法:

class Main {
    private static final Injector injector = Guice.createInjector();

    public static void main(String[] args) {
        MainWindow …
Run Code Online (Sandbox Code Playgroud)

java swing guice nullpointerexception classloader

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

使用assert而不是使用简单的"if"的任何好处?

鉴于此代码:

#include <stdio.h>
#include <assert.h>

void print_number(int* somePtr) {
  assert (somePtr!=NULL);
  printf ("%d\n",*somePtr);
}

int main ()
{
  int a=1234;
  int * b = NULL;
  int * c = NULL;

  b=&a;

  print_number (c);
  print_number (b);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我可以这样做:

#include <stdio.h>
#include <assert.h>

void print_number(int* somePtr) {
  if (somePtr != NULL)
       printf ("%d\n",*somePtr);
  // else do something 
}

int main ()
{
  int a=1234;
  int * b = NULL;
  int * c = NULL;

  b=&a;

  print_number (c);
  print_number (b);

  return …
Run Code Online (Sandbox Code Playgroud)

c assert if-statement

7
推荐指数
4
解决办法
4333
查看次数

即使代码在逻辑上不正确,为什么我得到正确的输出

以下是通过递归地添加数字的数字来将给定数字减少到单个数字的代码.

例如,如果输入是845输出8.8+4+5 = 17 -> 1+7 = 8(输出)

#include <stdio.h>
#define TRUE 1

int reduceToSingle(int numb);

int main() 
{
    int numb;
    scanf("%d",&numb);
    printf("Original = %d Single digit = %d\n", numb, reduceToSingle(numb));

    return TRUE;
} 

int reduceToSingle(int numb)
{
    int sum = 0, digit = 0;
    for (digit = numb % 10; numb != 0; numb = numb / 10)
    {
        digit = numb % 10;
        sum += digit;
    }

    if (sum > 9)
        reduceToSingle(sum); …
Run Code Online (Sandbox Code Playgroud)

c

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

在 Apache Camel 中以 UTC 格式格式化当前日期和时间

我正在实现与需要当前日期和时间的外部服务的集成。该服务的文档说它接受 ISO 8601 格式的日期时间,但这只是部分正确 - 它不支持时区偏移。

当我${date:now:yyyy-MM-dd'T'HH:mm:ssZ}在 Camel 中尝试时,我得到2017-08-16T21:45:10+0200,这是服务不可接受的。

有没有办法让骆驼日期格式以UTC格式输出当前日期?我想得到2017-08-16T19:45:10Z而不是2017-08-16T21:45:10+0200.

我想避免为此编写单独的 bean,所以我更喜欢纯粹在 XML DSL 中实现的解决方案。

apache-camel

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

为什么这些查询会返回不同的结果?

SELECT DISTINCT productName, listPrice 
FROM product 
WHERE productID IN (SELECT productID FROM saleItem WHERE quantity = 2)
  AND productID NOT IN (SELECT productID FROM saleItem WHERE quantity <> 2)
Run Code Online (Sandbox Code Playgroud)

嘿大家,我正在查询一个数据库,以便从本学期回顾教训,我有点困惑.上面的查询返回的结果数不同于下面的查询.这是一个入门级课程,我仍然无法弄清楚有多么quantity = 2不同NOT in (SELECT productID FROM saleItem WHERE quantity <> 2).我正在阅读语法的方式似乎他们应该只返回2的量.如果有人可以提供帮助,那将非常感激!如果这是一个格式不正确的问题,我道歉.

SELECT DISTINCT productName, listPrice 
FROM product 
WHERE productID IN (SELECT productID FROM saleItem WHERE quantity = 2)
Run Code Online (Sandbox Code Playgroud)

mysql sql

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