曾尝试在Linux中使用以下代码,但始终在不同的LANG设置下返回"C" .
#include <iostream>
#include <locale.h>
#include <locale>
using namespace std;
int main()
{
cout<<"locale 1: "<<setlocale(LC_ALL, NULL)<<endl;
cout<<"locale 2: "<<setlocale(LC_CTYPE, NULL)<<endl;
locale l;
cout<<"locale 3: "<<l.name()<<endl;
}
$ ./a.out
locale 1: C
locale 2: C
locale 3: C
$
$ export LANG=zh_CN.UTF-8
$ ./a.out
locale 1: C
locale 2: C
locale 3: C
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能在Linux中获得当前的语言环境设置(比如Ubuntu)?
另一个问题是,在Windows中获取区域设置的方式是否相同?
对我而言,a pair只是a的特例tuple,但令我惊讶的是:
pair<int, int> p1(1, 2); // ok
tuple<int, int> t1(1, 2); // ok
pair<int, int> p2={1, 2}; // ok
tuple<int, int> t2={1, 2}; // compile error
Run Code Online (Sandbox Code Playgroud)
我们{}用来初始化时为什么会有区别tuple?
我试过甚至g++ -std=c++1y但仍然有错误:
a.cc: In function 'int main()':
a.cc:9:29: error: converting to 'std::tuple<int, int>' from initializer list would use explicit constructor 'constexpr std::tuple<_T1, _T2>::tuple(_U1&&, _U2&&) [with _U1 = int; _U2 = int; <template-parameter-2-3> = void; _T1 = int; _T2 = int]'
tuple<int, int> t2={1, …Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio,并希望使用键盘转到上一个/下一个断点.我查看了选项|环境|键盘,但没有找到这样的命令.
有办法吗?
根据C++参考,您可以通过以下方式新建一个对象:
MyClass * p1 = new MyClass;
Run Code Online (Sandbox Code Playgroud)
或者
MyClass * p2 = new (std::nothrow) MyClass;
Run Code Online (Sandbox Code Playgroud)
第二个将返回空指针而不是抛出异常.
但是,根据我的经验,我几乎看不到这个版本.
例如,谷歌不建议在他们的代码中使用异常,但我们可以看到他们没有在Chromium中使用nothrow版本.
是否有任何理由我们更喜欢默认的一个而不是一个?即使在没有使用异常的项目中?
- 编辑 -
跟进问题:我应该检查返回值malloc()吗?
看起来,相反,许多人建议检查malloc的返回值,有些人说是因为:
许多分配失败与内存不足无关.碎片可能导致分配失败,因为即使有足够的可用内存,也没有足够的连续空间可用.
这是真的?为什么我们在这种情况下对待malloc()和new()不同?
有没有办法手动触发DOMContentLoaded事件?我正在尝试为一些客户端javascript编写单元测试,它在DOMContentLoaded事件上做了一些事情.
以下不起作用:document.dispatchEvent("DOMContentLoaded")或document.body.dispatchEvent("DOMContentLoaded");
在构建开源项目时,我遇到了以下错误:
make subdir=manual -C manual ..=../ subdir_lib
Makefile:235: *** mixed implicit and normal rules. Stop.
Run Code Online (Sandbox Code Playgroud)
Makefile第235行的代码如下:
235: $(objpfx)stubs ../po/manual.pot $(objpfx)stamp%:
236: $(make-target-directory)
237: touch $@
Run Code Online (Sandbox Code Playgroud) 以下目录设置对我来说非常适合.
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id="ProgramFilesFolder">
<Directory Id='INSTALLDIR' Name='MyApp'/>
</Directory>
</Directory>
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将"ProgramFilesFolder"更改为" LocalAppDataFolder "时,在使用light链接和生成我的msi 时遇到了很多错误:
D:\runGroup.wxs(53) : error LGHT0204: ICE38: Component cmpA5561BE36D80EB58252E69DDA0C2FF8C installs to user profile. It must use a registry key under HKCU as its KeyPath, not a file.
D:\main.wxs(38) : error LGHT0204 : ICE64: The directory INSTALLDIR is in the user profile but is not listed in the Remove File table.
看起来"LocalAppDataFolder"对于WiX来说是不可接受的,而我相信它是这里定义的系统文件夹属性之一.
我应该为LocalAppData文件夹使用什么?
我需要检查一个变量,以确定它是否设置正确,这可能是在几个循环之后发生的.
我现在正在做的事情如下:
(gdb) b myfile.cpp:180
(gdb) c
(gdb) p decoder.m_msg
(gdb) c
(gdb) p decoder.m_msg
(gdb) c
...
Run Code Online (Sandbox Code Playgroud)
decoder.m_msg每次程序中断时,我都可以自动打印此变量吗?
我说有一个阵列 List<Integer> 139, 127, 127, 139, 130
如何删除它的重复并保持其顺序不变?即139, 127, 130
例如,如果我们通过跟随函数遍历一个相当大的树,我们可能会得到堆栈溢出.
void inorder(node* n)
{
if(n == null) return;
inorder(n->l);
n->print();
inorder(n->r);
}
Run Code Online (Sandbox Code Playgroud)
如何在函数中添加条件或某些东西以防止这种溢出发生?
c++ ×4
c ×2
arrays ×1
breakpoints ×1
c++11 ×1
dom ×1
duplicates ×1
exception ×1
gdb ×1
installer ×1
java ×1
javascript ×1
locale ×1
makefile ×1
malloc ×1
new-operator ×1
recursion ×1
tuples ×1
wix ×1