小编hid*_*yat的帖子

问题理解c ++中的模板

在使用模板函数之前,不会编译模板代码.但它在哪里保存已编译的代码,它是否保存在首先使用模板函数的目标文件中?

例如,main.cpp从文件test.h调用模板函数,编译器生成一个目标文件main.o,是main.o文件中的模板函数吗?因为模板代码没有内联,是吗?

c++ compiler-construction templates

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

枚举作为模板

这就是我想要做的:

enum MyEnum
{
    ONE = 1, TWO, THREE
};

template<class T>
void func()
{
    cout << T::TWO << endl;
}

int main()
{
    func<MyEnum>();
};
Run Code Online (Sandbox Code Playgroud)

它有效,但我收到警告:"警告C4482:使用非标准扩展名:enum'MyEnum'用于限定名称"

如何在不收到警告的情况下执行此操作

c++ enums templates

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

在c ++中交换位为double

我试图从双尾端变为小尾端.一种方法是使用

double val, tmp = 5.55;

((unsigned int *)&val)[0] = ntohl(((unsigned int *)&tmp)[1]);
((unsigned int *)&val)[1] = ntohl(((unsigned int *)&tmp)[0]);
Run Code Online (Sandbox Code Playgroud)

但后来我收到一个警告:"解除引用类型惩罚指针将破坏严格别名规则",我不想关闭此警告.

另一种方法是:

#define ntohll(x) ( ( (uint64_t)(ntohl( (uint32_t)((x << 32) >> 32) )) << 32) | ntohl( ((uint32_t)(x >> 32)) ) ) 

val = (double)bswap_64(unsigned long long(tmp)); //or
val = (double)ntohll(unsigned long long(tmp));
Run Code Online (Sandbox Code Playgroud)

但后来失去了小数.任何人都知道在不使用for循环的情况下交换双位的好方法吗?

c++ floating-point double bits endianness

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

在eclipse cdt中找不到库文件

properties/C/C++构建/设置GCC C++链接器/库

在库(-I)下我有libbost_system libbost_filesystem ...并且在库搜索路径(-L)下我有/ home/etobkru/boost_1_43_0/boostBinaries/lib

但是当我编译时,我得到g ++ -L/home/etobkru/boost_1_43_0/boostBinaries/lib/-o"searchDirs"./ main.o -llibboost_system -llibboost_filesystem -llibboost_regex /usr/lib/gcc/i586-suse-linux/4.1 .2 /../../../../ i586-suse-linux/bin/ld:找不到-llibboost_system

我尝试过libbost_system.so和libbost_system.a,但我得到了同样的错误.我做错了什么以及为什么eclipse无法找到文件.因为他们在那里?

c++ eclipse linker boost

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

python打印功能的问题

我正在尝试这个功能:

def sleep(sec):
    for i in range(sec):
        print(".", end=" ");
        time.sleep(1);
Run Code Online (Sandbox Code Playgroud)

问题是它等待for循环完成然后打印所有内容.如果我使用普通打印\n到最后一切都按预期工作.但是,结果=""它没有.

python printing python-3.x

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

C#eventhandler如何在内部工作?

我猜C#evenhandler有一个监听器列表,它在发送消息时通过列表循环.我的问题是这是如何在内部工作的.它是否在循环之前制作列表的副本,如果是这样,如果有人在复制列表之后取消注册但尚未收到消息,会发生什么.

即使它已取消注册,它仍会得到消息吗?

c# event-handling

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

Xcode 6中不同设备的字体大小不同

我想在不同的设备上使用相同的文本.我正在使用通用故事板,但我找不到任何字体大小的限制.我知道您可以在新布局的不同设备上使用不同的文本字段,但我需要在代码中添加一些逻辑.我想使用相同的文本字段.

xcode ios swift xcode6

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

花括号和括号之间的参数评估顺序

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

uint32_t func() { return rand() % 10; }

struct A {
  uint32_t _x, _y, _z;
  A(uint32_t x, uint32_t y, uint32_t z) : _x(x), _y(y), _z(z) {}
};

int main() {
  A a{func(), func(), func()};
  //A a(func(), func(), func());

  printf("%d %d %d\n", a._x, a._y, a._z);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC 9.1并且MSVC 19.22.27905在使用大括号或括号时都将打印不同的顺序。 Clang 8.0.0两种情况下将打印相同的顺序。

我在标准中找不到任何内容,是在标准中找到还是由编译器命令它评估输入参数?

c++ constructor language-lawyer c++11 c++17

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

低耦合和紧密的内聚力

当然这取决于具体情况.但是当较低级别的对象或系统与更高级别的系统进行通信时,是否应优先使用回调或事件来保持指向更高级别对象的指针?

例如,如果我们正在开发游戏,我们就有world class一个成员变量vector<monster> monsters.如果monster class要与之通信world class,我应该更喜欢使用回调函数,还是应该指向怪物类中的世界类?

c++ coupling

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

按值返回指针不会移动对象

我用vs2011编译了这段代码.它打印第一个构造函数然后复制构造函数.但是如果我改变函数返回a而不是ap,它将移动对象.这是一个错误还是为什么它会像这样?*ap不是rvalue吗?

struct A
{
  A() { cout << "constructor" << endl;}
  A(const A&) { cout << "copy constructor " << endl;}
  void operator=(const A&) { cout << "assignment operator" << endl; }
  A( A&&) { cout << "move copy constructor" << endl;}
  void operator=(A&&) { cout << "move assignment operator" << endl;}
};

A func() { A a; A *ap = &a; return *ap; }

int main()
{
    A a = func(); …
Run Code Online (Sandbox Code Playgroud)

c++ rvalue move-semantics c++11

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