众所周知,有符号整数溢出是未定义的行为.但是C++ 11 cstdint
文档中有一些有趣的东西:
有符号整数类型,宽度分别为8,16,32和64位,没有填充位,负值使用2的补码(仅当实现直接支持该类型时提供)
这里是我的问题:由于标准明确地说,对int8_t
,int16_t
,int32_t
和int64_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++时,我理解了引用的概念,但指针让我感到困惑.你为什么问?因为你如何声明一个指针.
考虑以下:
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
指针作为参数.由于我已经声明y
为int
指针,我可以传递y
给foo
,但是当我第一次学习C++时,我将*
符号与解除引用相关联,因此我认为int
需要传递一个解引用.我会试图通过*y
进入foo
,这显然是行不通的.
用一个单独的运算符来声明指针会不会更容易?(或用于解除引用).例如:
void test(int@ x)
{
}
Run Code Online (Sandbox Code Playgroud) 我想知道...我前段时间读过关于Go的内容,我试图在其中编写一些东西.我觉得很有意思.但是我已经用这种语言处理了"例外".我已经阅读了他们的方法,这似乎是合理的.我想知道标准特殊方法相比Go的风格有什么优势?优缺点都有什么?
编辑直截了当:我不想对异常进行任何神圣的战争.我只是想知道这种处理错误的风格是否有任何优势?与标准例外相比,这种风格的实际优势是什么?值得怀疑的是什么?
我只是试图比较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) 我收到以下错误:
在 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) 我们有一个桌面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) 鉴于此代码:
#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) 以下是通过递归地添加数字的数字来将给定数字减少到单个数字的代码.
例如,如果输入是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) 我正在实现与需要当前日期和时间的外部服务的集成。该服务的文档说它接受 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 中实现的解决方案。
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) c++ ×3
c ×2
c++11 ×2
apache-camel ×1
assert ×1
classloader ×1
dereference ×1
go ×1
guice ×1
if-statement ×1
java ×1
lambda ×1
mongodb ×1
mysql ×1
notation ×1
performance ×1
pointers ×1
spring-boot ×1
sql ×1
swing ×1
syntax ×1