小编qdi*_*dii的帖子

仅使用GCC内在函数移植InterlockedExchange

Windows API提供InterlockedExchange,它以原子方式在内存中设置值.仅使用GCC内在函数,我想创建一个等效的函数.设置值然后调用内存屏障就足够了(参见下面的代码)?

template <typename T>
T InterlockedExchange(volatile T& _data, T _value)
{
    const T oldValue = _data;
    _data = _value;
    __sync_synchronize();
    return oldValue;
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

编辑:建议的片段不是问题的正确解决方案,因为它显然不是原子的(但是,我必须至少尝试一下).

c port gcc atomic

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

是否有可能在C++中获取当前(成员)函数名称?

我对RTTI知之甚少,但我相信,由于你可以在运行时检索变量的名称.是否可以检索线程当前正在运行的函数的名称?

c++

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

如何使用cygwin创建交汇点?

这个问题表明cygwin的软链接与ntfs交叉点有些不同.我希望cygwin能够建立一个真正的交汇点.我想跑步mklink但是,地狱,没有mklink.exe显然,它是shell命令的一部分.在那里我被卡住了.

知道如何在脚本上做到这一点吗?

cygwin ntfs junction

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

std :: string和多个连接

让我们考虑一下这个片段,请假设a,b,c和d是非空字符串.

    std::string a, b, c, d;
    d = a + b + c;
Run Code Online (Sandbox Code Playgroud)

当计算这3个std::string实例的总和时  ,标准库实现创建第一个临时std::string对象,在其内部缓冲区中复制a和的连接缓冲区b,然后在临时字符串和之间执行相同的操作c.

一位同事程序员强调,operator+(std::string, std::string)可以定义为返回a 而不是此行为std::string_helper.

这个对象的作用是将实际的连接推迟到它被转换为a的那一刻std::string.显然,operator+(std::string_helper, std::string)将被定义为返回相同的帮助程序,这将"牢记"它有一个额外的串联来执行的事实.

这样的行为可以节省创建n-1临时对象,分配缓冲区,复制它们等的CPU成本.所以我的问题是:为什么它不能像那样工作?我想不出任何缺点或限制.

c++ string optimization std

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

创建DLL时未解析的外部符号

我的一个朋友在创建DLL时会遇到一堆错误.Visual Studio抱怨未解析的外部符号.我主要是一个Unix用户,所以我可能会在那里弄错.在Unix上,当您创建静态库(存档)时,它不会将不同的目标文件连接到存档文件中.我希望动态对象以相同的方式创建,但显然会发生额外的链接阶段.

第一个问题:为什么dll存在链接阶段?

在这种情况下,DLL indeeds包含未定义的符号,因为我们希望DLL在EXE文件中找到这些符号.这与典型的DLL行为完全相反,其中EXE使用DLL中定义的符号.为了清楚起见,我希望在DLL加载到内存中时能够找到这些符号.

第二个问题:如何使DLL使用EXE文件中定义的符号?

编辑: 我重新提出了问题,因为我认为我没有明确说明问题.

c++ dll linker visual-studio

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

电子表格如何正确更新单元格/知道要更新的内容?

电子表格太漂亮了!单元格可以相互链接,如果任何公式/值/其中一个单元格中的任何更改,一切都正确更新!

有谁知道电子表格如何做到这一点的一般概念?我所说的是A1 = 1,A2 = 2,A3 = A1 + A2.然后我改变A1或A2,A3知道更新并正确完成.当然,在这个例子中它无法更新错误,但在更复杂的例子中,它必须首先更新"低"单元格,然后再更新构建在它之上的东西.

在编写自己编程时,我在基础数据更改后正在更新所有内容时遇到了麻烦.有时不是所有东西都必须更新,所以我不想更新所有内容.这只是一团糟.

我希望我的标签是正确的,并允许这样的讨论.谢谢!

spreadsheet

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

获取const lvalue引用的地址是否合法?

#include <iostream>
int foo()
{
  return 0;
}

int main()
{
  const int& a = foo();
  std::cout << &a << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

在此代码中,a绑定到右值.取其地址是否合法?(并且通过合法我的意思是:在代码格式不正确?我是否导致了未定义的行为?)

c++ rvalue lvalue

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

什么样的左值可以不采取地址?

这次会议上,斯科特迈耶斯首先说"低价值通常是你能得到的地址".我一般都在强调这个词:什么是你不能拿地址的左值?(如果存在).

编辑:请提供您的答案的代码片段,它使事情更清楚.

c++ lvalue c++11

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

使用void*而不是bool是一种可行的做法吗?

在讨论流时,Horstmann的C++陷阱解决了一个有趣的问题.引用他:

使用转换void*,而不是转换为intbool实现产生真值的对象.与int或不同bool,void*除了==比较之外没有任何合法的操作.

作为一名程序员,如果void*我期待一个布尔值,我会感到困惑.Horstmann提供了一个使用a void*而不是a bool似乎合适的例子.总是可取的吗?

c++ boolean void-pointers

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

是否可以在应用程序中使用X-AppEngine-Country

在提供请求时,GAE会自动将响应标头X-AppEngine-Country设置为一个值,该值指示发出请求的国家/地区.但是,在GAE发布响应之前,我希望能够在我的片段中使用此值.

我写了这段代码:

class TestPage(webapp2.RequestHandler):
    def get(self):
        country = self.response.headers["X-AppEngine-Country"]
        self.response.out.write("<pre>country %s </pre>" % country)
Run Code Online (Sandbox Code Playgroud)

但打开页面会导致崩溃:

  File "/base/python27_runtime/python27_lib/versions/third_party/webob-1.1.1/webob/headers.py", line 16, in __getitem__
    raise KeyError(key)
KeyError: 'x-appengine-country'
Run Code Online (Sandbox Code Playgroud)

有没有办法在应用程序中使用此值?

python google-app-engine geolocation

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