小编Bau*_*gen的帖子

int类型的构造方法

考虑到成本,这些情况是否相同?

// case 1
int a = 5;

// case 2
int a (5);

// case 3
int a;
a = 5
Run Code Online (Sandbox Code Playgroud)

c++

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

list comprehension python中的多个动作

我想知道如何在列表推导中执行多个命令.

你能给我一个简单的例子:

[print ("bla1") and print ("bla2") for i in list]
Run Code Online (Sandbox Code Playgroud)

所以对于4长度4的列表,我会:

bla1
bla2
bla1
bla2
bla1
bla2
bla1
bla2
Run Code Online (Sandbox Code Playgroud)

相反,我没有在文档中轻易找到它.(如果你能看到一个明显的原因,我没有,并可以让我知道我应该如何搜索更好的东西).

编辑:好的,根据评论,这是一个非常糟糕的例子.我兴趣从旧的创建一个新的,但我觉得我需要两个命令来做到这一点.(当然不是简单的印刷品).例如.我有一个列表列表,我想创建一个列表,该列表是操作子列表的结果.

python list-comprehension

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

按键排序std :: unordered_map

如何unordered_map按顺序排序?我需要打印unordered_map按键排序.

c++ sorting unordered-map

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

服务回调到android中的活动

我有一个后台服务运行和一个与服务交互的客户端.

当客户端请求某些操作时,服务执行它并且它应该将结果发送回活动(客户端).

我知道如何在活动中调用服务方法并使用回调我们可以实现我想要做的事情.但我无法理解Api演示(remoteservice)中提供的回调机制和代码示例.

有人可以解释这个服务回调是如何工作的; 或者使用更简单的机制可以实现的任何东西.

service android callback

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

为什么一个大的本地数组会崩溃我的程序,但全局的数组不会崩溃?

具有大型全局数组的程序:

int ar[2000000];

int main()
{
}
Run Code Online (Sandbox Code Playgroud)

使用大型本地数组的程序:

int main()
{
    int ar[2000000];
}
Run Code Online (Sandbox Code Playgroud)

当我在main函数中声明一个大尺寸的数组时,程序崩溃并出现"SIGSEGV(Segmentation fault)".

但是,当我将其声明为全局时,一切正常.这是为什么?

c c++ arrays

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

使用重载的普通新运算符放置新的

我有一个类型的对象MyType,出于SSE的原因,需要16字节对齐.所以,我写了一个分配器并重载了new运算符.方法MyType:

inline static void* operator new(size_t size) {
    awesome::my_allocator<MyType,16> alloc;
    return alloc.allocate(size);
}
inline static void* operator new[](size_t size) { return operator new(size); }
inline static void operator delete(void* ptr) {
    awesome::my_allocator<MyType,16> alloc;
    alloc.deallocate(reinterpret_cast<MyType*>(ptr),0); //last arg ignored in my impl
}
inline static void operator delete[](void* ptr) { operator delete(ptr); }
Run Code Online (Sandbox Code Playgroud)

现在,出于缓存局部性的原因,我需要将实例复制构造到特定的64字节对齐的内存中:

void MyType::copy_into(uint8_t* ptr) const {
    new (reinterpret_cast<MyType*>(ptr)) MyType(*this);
}
Run Code Online (Sandbox Code Playgroud)

GCC告诉我:

error: no matching function for call to ‘MyType::operator new(sizetype, MyType*)’
Run Code Online (Sandbox Code Playgroud)

ICC告诉我:

error …
Run Code Online (Sandbox Code Playgroud)

c++ new-operator

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

带双打的C++可变参数模板

以下代码

#include <initializer_list>
#include <vector>

template<int ...>
const std::vector<int>*make_from_ints(int args...)
{ return new std::vector<int>(std::initializer_list<int>{args}); }
Run Code Online (Sandbox Code Playgroud)

正在编译(使用GCC 6.3,在Debian/Sid/x86-64上),我希望它可以像

auto vec = make_from_ints(1,2,3);
Run Code Online (Sandbox Code Playgroud)

返回指向包含1,2,3的整数向量的指针.

但是,如果我替换intdouble,那就是如果我添加以下(在相同的basiletemplates.cc文件...中)代码:

template<double ...>
const std::vector<double>*make_from_doubles(double args...)
{ return new std::vector<double>(std::initializer_list<double>{args}); }
Run Code Online (Sandbox Code Playgroud)

我收到编译错误:

basiletemplates.cc:8:17: error: ‘double’ is not a valid type
                for a template non-type parameter
 template<double ...>
                 ^~~
Run Code Online (Sandbox Code Playgroud)

而且我不明白为什么.毕竟这两个intdouble是标数值POD类型(在C++ 11标准的预定义).

如何获得模板可变函数以便能够编码:

auto dvec = make_from_doubles(-1.0, 2.0, 4.0);
Run Code Online (Sandbox Code Playgroud)

并获得一个指向包含-1.0,2.0,4.0的双精度矢量的指针?

BTW,编译C++ 14(带g++ -Wall -std=c++14 -c basiletemplates.cc)和使用clang++(版本3.8.1)而不是 …

c++ variadic-templates c++11

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

解析void()和int()之间的区别

阅读了最令人烦恼的解析后,我进行了一些实验并找到了这个程序.有两条非常相似的线.其中一个在g ++ 7和clang ++ - 3.9中产生警告,另一个则没有.

int main() {
  void(); // no warning
  int(); // warning: statement has no effect
}
Run Code Online (Sandbox Code Playgroud)

在第二行中,创建了一个默认构造的类型对象int并立即销毁,因此未使用.但是第一行会发生什么?如果以相同的方式解析它,则应该是错误,因为创建类型的对象是非法的void.另一方面,它看起来也不像函数声明.

c++ most-vexing-parse language-lawyer

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

编译std :: vector的时间触发范围检查

目标:

我想为我的调试版本提供范围检查版本的std::vectors operator [],并且在发布模式下没有范围检查.

调试模式下的范围检查显然对调试有好处,但是在我的发布代码中导致速度减慢5% - 10%,我想避免.

可能的解决方案:

我在Stroustrup的"The C++编程语言"中找到了一个解决方案.他做了以下事情:

template <class T>
class checked_vector : public std::vector<T> {
    public:
        using std::vector<T>::vector;

        //override operator [] with at()
};
Run Code Online (Sandbox Code Playgroud)

这是有问题的,因为它继承自具有非虚拟析构函数的类,这是危险的.(并且休息室 不太 喜欢那个解决方案.)

另一个想法是这样的类:

template <class T>
class checked_vector {
    std::vector<T> data_;

    public:
        //put all public methods of std::vector here by hand

};
Run Code Online (Sandbox Code Playgroud)

这既繁琐又会产生大量的复制粘贴,这也很糟糕.

上述解决方案的优点在于我可以在makefile中使用宏定义来简单地打开和关闭它们.

问题:

  1. 有更好的解决方案吗?(如果没有,为什么不呢?)
  2. 如果没有,上述其中一项是否可以接受?(我知道这个是基于意见的,如果可能,请关注第1号.)

c++ vector c++11

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

将数字与NaN进行比较的结果是什么?

例如,考虑一下

bool fun (double a, double b) {
    return a < b;
}
Run Code Online (Sandbox Code Playgroud)

fun如果任何参数是NaN 会返回什么?这是未定义/实现定义的行为吗?

其他关系运算符和相等运算符会发生什么?

c++

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