所以从另一个帖子中提出的问题来看,我已经想到了一个新问题,答案对我来说并不明显.
所以看来有一个c ++规则说如果你有一个临时的const引用,那么临时的生命周期至少和const引用一样长.但是,如果你有一个本地const引用另一个对象的成员变量然后当你离开作用域时,它会调用该变量的析构函数吗?
所以这里是原始问题的修改程序:
#include <iostream>
#include <string>
using namespace std;
class A {
public:
A(std::string l) { k = l; };
std::string get() const { return k; };
std::string k;
};
class B {
public:
B(A a) : a(a) {}
void b() { cout << a.get(); } //Has a member function
A a;
};
void f(const A& a)
{ //Gets a reference to the member function creates a const reference
stores it and goes out of scope …Run Code Online (Sandbox Code Playgroud) 是否在gcc和g ++编译器中定义了预处理器宏,以便如果我想将C代码链接到C标准库或C++标准库?就像是:
someFile.c
#ifdef __CPP__
#include <c++ library include>
#else
#include <c library include>
Run Code Online (Sandbox Code Playgroud)
我确信有一个快速的谷歌搜索没有立即指出我,我相信有人会发布重复的问题,但无论如何,请指出我正确的方向.
没有足够的例子,我一直在兜圈子,以得到“日期”打印出的“秒”版本的iso8601。请查看busybox 1.22.1 随date 提供的帮助。我似乎无法理解所需的语法。根据我的经验,例子胜于雄辩,我还没有在网上找到任何有用的东西。
这是我尝试过的:
? date -I=seconds
? date -I SPEC='seconds'
? date -I seconds
? date -I='seconds'
? date -I 'seconds'
? date -I['seconds']
? date -I TIMESPEC='seconds'
? date -I TIMESPEC=seconds
Run Code Online (Sandbox Code Playgroud)
注意我尝试使用 Ubuntu 版本的 date 并且能够弄清楚如何获取日期的 iso8601=seconds 格式,但不是在 busybox ...
以下是 Busybox 1.22.1 的 date 帮助:
BusyBox v1.22.1 (2014-09-26 07:33:17 CEST) multi-call binary.
Usage: date [OPTIONS] [+FMT] [TIME]
Display time (using +FMT), or set time
[-s,--set] TIME Set time to TIME
-u,--utc Work in UTC (don't convert …Run Code Online (Sandbox Code Playgroud) 我是C++标准库的新手,并且一直在使用标准库列表来实现特定的多线程实现.我注意到使用我在任何教程/博客/论坛帖子上都没有看过的列表可能会有一些技巧,虽然对我来说似乎显而易见,似乎没有人考虑过.所以也许我太新了,可能会遗漏一些东西,所以希望比我聪明的人可以验证我想要实现的目标,或者向我解释我做错了什么.
因此我们知道,通常标准库容器不是线程安全的 - 但这似乎是一个指导性声明而不是规则.使用列表似乎对线程安全有一定程度的容忍度.让我解释一下,我们知道如果我们从列表中添加/删除列表不会失效.获取无效的唯一迭代器是已删除的项 - 您可以使用以下代码行修复它:
it = myList.erase(it)
Run Code Online (Sandbox Code Playgroud)
所以现在让我们说我们有两个线程并将它们称为线程1和线程2.
线程1的职责是添加到列表中.它将其视为队列,因此它使用std :: list :: push_back()函数调用.
线程2的职责是将存储在列表中的数据作为队列进行处理,然后在处理之后将从列表中删除元素.
它保证线程2不会删除列表中刚刚在其处理过程中添加的元素,并且线程1保证它将提前排队必要的数据以进行线程2的处理.但是,请记住,在线程2的处理过程中可以添加元素.
因此,似乎这是在这个多线程环境中合理使用列表而不使用锁来进行数据保护.我说它合理的原因是因为,本质上,线程2将只处理数据到现在为止它可以检索由以下伪代码显示的当前结束迭代器:
Thread 2 {
iter = myList.begin();
lock();
iterEnd = myList.end(); // lock data temporarily in order to get the current
// last element in the list
unlock();
// perform necessary processing
while (iter != iterEnd) {
// process data
// ...
// remove element
iter = myList.erase(iter);
}
}
Run Code Online (Sandbox Code Playgroud)
线程2使用锁定的时间非常短,只是为了知道停止处理的位置,但大多数情况下,线程1和线程2不需要任何其他锁定.此外,如果线程2知道当前最后一个元素的范围是灵活的,那么线程2也可以避免锁定.
有人看到我的建议有什么问题吗?
谢谢!
所以今天我遇到了一个bug,其中NULL被传递到构造函数的参数列表中,这导致应用程序中断.奇怪的是,编译器没有禁止这种情况发生.由于参数列表发生了变化,直到现在才发现问题.请参阅以下代码段:
该对象需要3个参数,密切关注std :: string&.
class Foo {
public:
std::string myName;
unsigned int someVariable;
void * ptr;
Foo(const std::string& name, void * aPtr, unsigned int variable);
~Foo();
}
Foo::Foo(const std::string& name, void * aPtr, unsigned int variable) : myName(name), ptr(aPtr), someVariable(variable)
{
// object constructed
}
int main(int argc, char* argv[])
{
// construct an instance of Foo
Foo foo(NULL /*whoops, passed in NULL when a string should be passed in*/,
"foo",
0); // program compiles as expected, A NULL pointer …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个宏,可以从本地活动工作簿中的Excel电子表格中收集数据,然后创建头文件,我稍后将其合并到我的项目中.但是对于我的生活,我必须遗漏一些东西,所以DUMB我无法创建一个工作函数,它返回一个字符串(它将构造一个C++结构)给调用函数.我已经将示例代码简化为绝对最低限度来隔离问题,但我仍然无法弄清楚我做错了什么.我不是VBA的专家,但我知道如何创建代码,我不能缩小VBA不满意的地方.我一直得到"编译错误,语法错误." 请将以下代码复制到您的模块中,看看是否正确编译.如果你知道我哪里出错了,请告诉我.非常感激!!!
Sub CREATE_FACTORY_SETTING_HEADER()
Dim FS, TSsource
Set FS = CreateObject("Scripting.FileSystemObject")
Dim TSout
Set TSout = FS.Createtextfile("HeaderFile.h", True)
Dim fileHeading As String
fileHeading = "File Heading for Header file"
Dim fileBody As String
fileBody = "Some initial file body lines"
fileBody = fileBody & createStructBody
TSout.Write fileHeading & fileBody
TSout.Close
End Sub
Public Function createStructBody() As String
Dim structBody As String
structBody = "Hey I'm a struct body, but I can't be returned for some reason"
Return structBody
End Function
Run Code Online (Sandbox Code Playgroud)