小编jle*_*ahy的帖子

如何将wstring转换为字符串?

问题是如何将wstring转换为字符串?

我有下一个例子:

#include <string>
#include <iostream>

int main()
{
    std::wstring ws = L"Hello";
    std::string s( ws.begin(), ws.end() );

  //std::cout <<"std::string =     "<<s<<std::endl;
    std::wcout<<"std::wstring =    "<<ws<<std::endl;
    std::cout <<"std::string =     "<<s<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

注释掉的输出是:

std::string =     Hello
std::wstring =    Hello
std::string =     Hello
Run Code Online (Sandbox Code Playgroud)

但不仅仅是:

std::wstring =    Hello
Run Code Online (Sandbox Code Playgroud)

这个例子有什么不对吗?我可以像上面那样进行转换吗?

编辑

新的例子(考虑到一些答案)是

#include <string>
#include <iostream>
#include <sstream>
#include <locale>

int main()
{
    setlocale(LC_CTYPE, "");

    const std::wstring ws = L"Hello";
    const std::string s( ws.begin(), ws.end() );

    std::cout<<"std::string =     "<<s<<std::endl;
    std::wcout<<"std::wstring =    "<<ws<<std::endl;

    std::stringstream ss;
    ss …
Run Code Online (Sandbox Code Playgroud)

c++ unicode stl wstring

191
推荐指数
13
解决办法
26万
查看次数

使用git pull从远程获取所有标签

我目前有一个git远程设置,如下所示:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
Run Code Online (Sandbox Code Playgroud)

当我git pull在分支主机上发出时,所有远程头都被提取到遥控器/上游,然后遥控器/上游/主机被合并到主机.任何可以到达的标签也同时被提取,这非常方便.

我想git pull另外从遥控器上获取所有标签,而不仅仅是从头部可以直接访问的标签.我最初尝试过seting tagopt == --tags,但发现这导致只有标签被取出,从而打破了一切.(Junio甚至说这是一个可怕的错误配置).

git pull除了远程磁头之外,有没有办法默认获取所有远程标签?

git

141
推荐指数
6
解决办法
13万
查看次数

asm,asm volatile和clobbering memory之间的区别

在实现无锁数据结构和时序代码时,通常需要抑制编译器的优化.通常人们在clobber列表中使用asm volatilewith memory,但你有时会看到asm volatile或只是一个简单的asm破坏性记忆.

这些不同的陈述对代码生成有什么影响(特别是在GCC中,因为它不太可能是可移植的)?

仅供参考,这些是有趣的变化:

asm ("");   // presumably this has no effect on code generation
asm volatile ("");
asm ("" ::: "memory");
asm volatile ("" ::: "memory");
Run Code Online (Sandbox Code Playgroud)

c gcc inline-assembly

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

'tuple'对象不支持项目分配

我正在使用PIL库.

我试图使图像看起来更红,这就是我所拥有的.

from PIL import Image
image = Image.open('balloon.jpg')
pixels = list(image.getdata())
for pixel in pixels: 
    pixel[0] = pixel[0] + 20    
image.putdata(pixels)
image.save('new.bmp')
Run Code Online (Sandbox Code Playgroud)

但是我收到此错误: TypeError: 'tuple' object does not support item assignment

python python-imaging-library

46
推荐指数
3
解决办法
12万
查看次数

为什么在樱桃选择之后的反弹不能同时执行相同的提交?

当您从一个分支(比如说"主题")中选择一个提交到另一个分支(让我们称之为"master")时,该提交的历史记录会被重写,其哈希值会发生变化,并且它实际上会成为一个新的独立提交.

但是当你随后对master git进行rebase主题时,聪明到足以知道不要两次申请提交.

例:

A --- B <- master
      \
       \---- C ---- D <- topic

$ git checkout master
$ git cherrypick D

A --- B --- D' <- master
      \
       \---- C ---- D <- topic

$ git checkout topic
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying 'C'

A --- B --- D' <- master
            \
             \---- C' <- topic
Run Code Online (Sandbox Code Playgroud)

这个神奇的工作原理如何?IE浏览器.git如何知道它应该应用C到D',而不是D到D'?

git

28
推荐指数
1
解决办法
4531
查看次数

GCC与MS C++编译器,用于维护API向后二进制兼容性

我来自Linux世界,并且知道很多关于维护用C++语言编写的动态库API的向后二进制兼容性(BC)的文章.其中之一是基于Itanium C++ ABI的"使用C++的策略/二进制兼容性问题",它由GCC编译器使用.但我找不到类似的Microsoft C++编译器(来自MSVC).

我知道大多数技术都适用于MS C++编译器,我想发现与ABI差异相关的编译器特定问题(v表格布局,修改等)

所以,我的问题如下:

  • 你知道维护BC时MS C++和GCC编译器之间有什么区别吗?
  • 在哪里可以找到有关MS C++ ABI的信息或在Windows中维护API的BC?

任何相关信息将受到高度赞赏.
非常感谢你的帮助!

c++ gcc backwards-compatibility visual-c++ itanium-abi

19
推荐指数
3
解决办法
4845
查看次数

委派默认移动构造函数

我经常发现自己为具有许多成员变量的类编写繁琐的移动构造函数.它们看起来如下:

A(A && rhs) :
    a(std::move(rhs.a)),
    b(std::move(rhs.b)),
    c(std::move(rhs.c)),
    d(std::move(rhs.d)) {
    some_extra_work();
}
Run Code Online (Sandbox Code Playgroud)

也就是说,它们执行与默认移动构造函数关联的所有操作,然后执行一些普通的额外任务.理想情况下我会委托给默认的移动构造函数然后执行额外的工作,但是我定义自己的移动构造函数的行为阻止了默认的实现被定义,表示没有什么可以委托.

有没有一种很好的方法来绕过这种反模式?

c++ c++11

19
推荐指数
1
解决办法
839
查看次数

一对consts和const对之间的区别

在C++中,std::pair<const T, const U>和之间的行为有什么不同const std::pair<T, U>

c++ const

16
推荐指数
1
解决办法
4317
查看次数

如何cout std :: basic_string <TCHAR>

我想尝试一个basic_string<TCHAR>.但是cout正在抛出错误.我可以知道该怎么做

c++ string stl visual-c++

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

通过获取原子载荷来提升非原子载荷

我的印象是内存加载无法在C++ 11内存模型中的获取负载之上提升.然而,看看gcc 4.8产生的代码,对于其他原子载荷而言似乎只是真实的,而不是所有的内存.如果这是真的并且获取负载不同步所有内存(只是std::atomics)那么我不确定如何用std :: atomic实现通用互斥锁.

以下代码:

extern std::atomic<unsigned> seq;
extern std::atomic<int> data;

int reader() {
    int data_copy;
    unsigned seq0;
    unsigned seq1;
    do {
        seq0 = seq.load(std::memory_order_acquire);
        data_copy = data.load(std::memory_order_relaxed);
        std::atomic_thread_fence(std::memory_order_acquire);
        seq1 = seq.load(std::memory_order_relaxed);
    } while (seq0 != seq1);
    return data_copy;
}
Run Code Online (Sandbox Code Playgroud)

生产:

_Z6readerv:
.L3:
    mov ecx, DWORD PTR seq[rip]
    mov eax, DWORD PTR data[rip]
    mov edx, DWORD PTR seq[rip]
    cmp ecx, edx
    jne .L3
    rep ret
Run Code Online (Sandbox Code Playgroud)

这对我来说是正确的.

但是,将数据更改为int而不是std::atomic:

extern std::atomic<unsigned> seq;
extern int data; …
Run Code Online (Sandbox Code Playgroud)

c++ gcc atomic c++11

13
推荐指数
1
解决办法
782
查看次数