这是关于std::is_pod,它检测模板是否是普通旧数据类型.
请参阅以下代码:
struct A {
public:
int m1;
int m2;
};
struct B {
public:
int m1;
private:
int m2;
};
struct C {
private:
int m1;
int m2;
};
int main()
{
std::cout << std::boolalpha;
std::cout << std::is_pod<A>::value << '\n'; // true
std::cout << std::is_pod<B>::value << '\n'; // false
std::cout << std::is_pod<C>::value << '\n'; // true
}
Run Code Online (Sandbox Code Playgroud)
这3个结构对我来说都像POD.但显然struct B不是.我不明白为什么.对我来说,他们都有一个简单的构造函数,移动和复制操作符.析构函数当然也是微不足道的.
我责备它使用2访问说明符,但我找不到有关此信息.
我的gcc版本是4.8.3 20140624.我可以使用is_pod,is_trivial,is_standard_layout,但尝试失败时is_trivially_copyable,is_constructible和is_default_constructible,也许更多.错误消息是'xxx' is not a member of 'std'.
这有什么问题?它们甚至得到当前海湾合作委员会的支持吗?谢谢!
我很想知道printf()当程序退出时函数的flush 如何工作.
我们来看下面的代码:
int main(int ac, char **av)
{
printf("Hi");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如何printf()管理将其缓冲区刷新到stdout?
我想这是平台依赖的,所以让我们采取Linux.
它可以使用gcc's 实现,__attribute__((dtor))但标准库将依赖于编译器.我认为这不是它的工作方式.
任何解释或文档链接表示赞赏.谢谢.
我正在玩堆栈和函数的调用参数.我想在这里实现的是直接使用堆栈获取变量参数的值.
当我不使用变量参数时,它工作(或似乎工作)很好.这是什么工作:
void test(int a, int b)
{
unsigned char *ptr;
int i;
ptr = (unsigned char*)&a;
for (i = 0; i < 4; i++)
{
printf("%d,", *ptr);
}
}
Run Code Online (Sandbox Code Playgroud)
这有效,我可以检索b的值; 使用相同的代码
void test(int a, ...);
Run Code Online (Sandbox Code Playgroud)
因为函数的原型不起作用.
我不明白这里发生了什么.
你能帮助我吗?谢谢 !
编辑:好的,然后它看起来没有稳定可靠的方式来做我自己的那种东西.让我们说在callee函数中我知道变量参数的数据大小(但不是类型),有没有办法抓住它们?
我对Qt模块如何在Qt中使用多线程应用程序感到困扰. http://doc.qt.io/qt-5/threads-modules.html#threads-and-the-sql-module明确指出"只能在创建连接的线程中使用连接".
但是我写的这段代码有效:
#include <QCoreApplication>
#include <QSqlQuery>
#include <QtConcurrentRun>
void req()
{
QSqlQuery q("INSERT INTO users (username) VALUES (\"test\")");
}
void db()
{
QSqlDatabase _db;
_db = QSqlDatabase::addDatabase("QMYSQL");
_db.setDatabaseName("dbname");
_db.setHostName("host");
_db.setUserName("username");
_db.setPassword("password");
if (_db.open())
std::cout << "Ok" << std::endl;
else
std::cout << "Error" << std::endl;
}
int main(int ac, char **av)
{
QCoreApplication app(ac, av);
QtConcurrent::run(db);
sleep(1);
QtConcurrent::run(req);
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序设计需要多个线程与数据库交互.线程由QtConcurrent :: run()生成和管理.
那么,既然这段代码可以用,或者我会遇到麻烦吗?
欢迎任何帮助,文档或解释!谢谢.
我遇到了一些我无法理解的东西,也找不到适当的解决方法.我想要实现的目标看起来相对简单:我想比较一些数据.
描述的最佳方式是一行代码:
std::tuple<const char *, int, const char *, int> my_data =
std::make_tuple("hello", 13, "world", 37);
// Now I want to compare my_data againt some known value.
assert(Test::entry(my_data, "hello", 13, "world", 37));
Run Code Online (Sandbox Code Playgroud)
为了这个例子我正在使用一个元组.我的情况是,这些数据来自消息对象并使用提取operator>>.但是,这与问题无关.
这是一个简单的代码来说明问题.
#include <cstring>
using MyTuple = std::tuple<const char *, int, const char *, int>;
namespace Test
{
// called when we are done
bool extract(MyTuple source)
{
return true;
}
template<typename T,
typename ...Content>
bool extract(MyTuple source, T data, Content... content)
{
if (std::is_same<const char …Run Code Online (Sandbox Code Playgroud) 访问数组时,我们使用运算符,[]如下所示:
int a[5];
...
a[b] = 12;
Run Code Online (Sandbox Code Playgroud)
b上面变量的正确数据类型是什么?
我发现这a[b]相当于*(a + b),这让我觉得我想b成为void*或者size_t但是,我不确定.
我开始学习OpenMP并发现了该#pragma omp atomic指令.
我对C++ 11的原子有基本的了解,并且知道你可以将memory_order参数传递给atomics的方法.如果我错了,请纠正我,但我认为如果使用memory_order_seq_cst例如,这允许使用原子作为同步点.
一些限制较少的内存顺序,比如memory_order_relaxed确保原子上的操作同步并且对其他人可见.它对其他内存更新没有任何帮助.
我想知道OpenMP的原子指令使用了什么内存顺序.它只会同步对原子的访问,还是作为内存同步的点?
我的猜测是,它更像是memory_order_relaxed,因为critical这里提供完全同步.
我欢迎任何好的解释/信息.谢谢.
我有以下代码片段:
#include<iostream>
int main()
{
extern int a;
printf("a = %d", a)
}
int a = 10;
Run Code Online (Sandbox Code Playgroud)
上面的示例代码打印10.我的猜测是应该打印垃圾值.有人可以解释一下吗?
如果函数的参数的int *check(register int,register int);存储类声明为其他存储类,则以下代码显示错误.
我使用GNU GCC Compiler在Code :: Blocks 10.05 IDE上编译了这段代码.错误背后的原因是什么?它是编译器特定的错误还是一般错误?代码部分从这里开始:
int *check(register int, register int);
int main()
{
int *c;
c = check(10, 20);
printf("%d\n", c);
return 0;
}
int *check(register int i,register int j)
{
int *p = i;
int *q = j;
if(i >= 45)
return (p);
else
return (q);
}
Run Code Online (Sandbox Code Playgroud)