我一直试图找出一些边界g++,特别是链接(C++)目标文件.我发现以下好奇心,我试着尽可能多地压缩,然后再询问.
文件 common.h
#ifndef _COMMON_H
#define _COMMON_H
#include <iostream>
#define TMPL_Y(name,T) \
struct Y { \
T y; \
void f() { \
std::cout << name << "::f " << y << std::endl; \
} \
virtual void vf() { \
std::cout << name << "::vf " << y << std::endl; \
} \
Y() { \
std::cout << name << " ctor" << std::endl; \
} \
~Y() { \
std::cout << name << " dtor" …Run Code Online (Sandbox Code Playgroud) 我想CXXFLAG在我的构建系统中添加一个强制整个代码库的定义.因此,编译器应拒绝以静态方式展示未定义行为的每一段代码.
例如reinterpret_cast<A*>(someIntPtr)->aMember,没有任何运行时上下文未定义(a),而int i = bar(); i /= i;可能导致未定义的行为(b)取决于运行时评估bar()(可能返回零).
我只希望抓住(a)案件,而不一定是(b)案件.
自动对象(在堆栈上创建的对象)的销毁是否可以保证在它们超出范围之前执行?
澄清:
#include <iostream>
class A {
public:
A() {
std::cout << "1";
}
~A() {
std::cout << "3";
}
};
void test123() {
A a;
std::cout << "2";
}
Run Code Online (Sandbox Code Playgroud)
要打印"2",a不再需要了,所以从理论上讲,编译器可以a在不再需要时尽快进行优化和销毁.
我可以依靠以上功能始终打印123吗?
在创建数组时,编译器必须知道它的大小吗?例如,以下代码段无法编译.
class A
{
int n;
int arr[n];
};
Run Code Online (Sandbox Code Playgroud)
但是,以下编译.
int main()
{
int n;
std::cin >> n;
int arr[n];
}
Run Code Online (Sandbox Code Playgroud)
为什么?
我有一个宏,它接受一些参数,其中一个是一个类型.例如:
#define macro(T,x) T x
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用模板类型对其进行实例化,请说:
macro(Type<int,float>,var);
Run Code Online (Sandbox Code Playgroud)
这不会按预期工作,因为预处理器不知道任何模板.它会将其解析为三个参数:
macro(
Type<int,
float>,
var
);
Run Code Online (Sandbox Code Playgroud)
有没有解决的办法?我用了一个,typedef Type<int,float> T;但我想知道是否可以在不引入另一种(可能是全局的)类型的情况下进行内联.
也许逗号可以守卫?
假设我有一个std::vector<T> fromandstd::vector<T> to其中T是不可复制但可移动的类型,并且to可能为空,也可能不为空。我希望所有元素都from附加在 后面to。
如果我使用std::vector<T>::insert(const_iterator pos, InputIt first, InputIt last)重载 (4) with pos = to.end(),它将尝试复制所有对象。
现在,如果to.empty()我可以的话std::move(from),否则我可以先手动from.reserve(from.size()+to.size())然后手动to.emplace_back(std::move(from[i]))每个元素from,最后from.clear()。
有没有直接的方法可以std使用方便的函数或包装器来做到这一点?
constexpr 函数的标准在[decl.constexpr] 的第 5 点下说明:
对于非模板、非默认的 constexpr 函数或非模板、非默认、非继承的 constexpr 构造函数,如果不存在参数值使得函数或构造函数的调用可以是核心常量的计算子表达式表达式 (5.19),程序格式错误;无需诊断。
它继续为此提供以下示例:
constexpr int f(bool b){ return b ? throw 0 : 0; } // OK
constexpr int f() { return f(true); } // ill-formed, no diagnostic required
Run Code Online (Sandbox Code Playgroud)
我从中得到的是,带有空参数列表的函数是非诊断格式错误的。这让我觉得非常奇怪,以至于我怀疑我的理解是不正确的。例如,这是否也是格式错误的:
constexpr int g() { return 0; } // ill-formed?
Run Code Online (Sandbox Code Playgroud)
如果是这样,这背后的基本原理是什么,如果不是,则限定意味着什么/ constexpr 函数何时变得格式错误?
想必以下这些都可以吧?
constexpr int h(int x) { return x; } // presumably fine?
constexpr int l = h(42); // also fine
Run Code Online (Sandbox Code Playgroud) 我想读取每行包含1和0的文件.如何在读取文件后存储false任何bool变量0.
我正在使用unix who命令处理一个想法.众所周知,似乎没有直接开关只提供用户名和行(终端)信息而没有日期和屏幕信息...例如:输出是mneedham tty7...2012-02-19 11:26 (:0)
我想要得到的只是那mneedham tty7部分.无论用户名和终端信息有多长,解决方案都需要工作.
我尝试使用tr -s ' '(一个空间)who | tr -s ' ',这给了我一切之间的空间.不是我想要的.Tried cut -d" " -f1只获取用户名.所以我希望有人可以帮我找到正确的命令来获取两点信息.
谢谢.
我正在尝试编译这个名为Pirni的C程序,它最初是为iPhone制作的,我想在Linux Ubuntu 12.04 LTS上运行它.它很短,(3个C文件和1个头文件).但我得到以下错误.我确实libpcap-dev安装了,但我确实包含了-lpcap所以我不知道可能出现什么问题.
gcc -Wall -pthread -lpcap pirni.c threads.c sniffer.c -o pirni -lnet
pirni.c: In function ‘set_forwarding’:
pirni.c:31:2: warning: implicit declaration of function ‘sysctlbyname’ [-Wimplicit-function-declaration]
/tmp/cc3sf284.o: In function `set_forwarding':
pirni.c:(.text+0xfd): undefined reference to `sysctlbyname'
/tmp/ccvGjyMo.o: In function `processPacket':
sniffer.c:(.text+0x1b): undefined reference to `pcap_dump'
/tmp/ccvGjyMo.o: In function `initSniffer':
sniffer.c:(.text+0xfa): undefined reference to `pcap_open_live'
sniffer.c:(.text+0x15a): undefined reference to `pcap_lookupnet'
sniffer.c:(.text+0x1af): undefined reference to `pcap_compile'
sniffer.c:(.text+0x1dd): undefined reference to `pcap_setfilter'
sniffer.c:(.text+0x222): undefined reference to `pcap_dump_open'
sniffer.c:(.text+0x27c): …Run Code Online (Sandbox Code Playgroud)