在C++ 11中是否有一种简单的方法可以使用与正在使用的ostream相关联的语言环境的相应格式规则来打印当前的挂起时间?
我真正想做的是这样的事情:
myStream << std::chrono::system_clock::now();
Run Code Online (Sandbox Code Playgroud)
并根据与之相关的任何区域设置打印日期和时间myStream.C++ 11提供put_time,但它需要格式化字符串,我希望格式由与流关联的语言环境确定.还有time_put和time_put_byname,但基于在cppreference.com的例子中,这些功能配合使用put_time.
有没有简单的方法来打印时间点值而不手动格式化它?
在vim中gf打开名称在当前窗口中光标下的文件.<C-W>f做同样的事情,但在新窗口中打开它.但是,这个新窗口是使用水平拆分创建的.
我怎样才能做同样的事情并进行垂直分割?
我尝试了各种有效的替代方案(比如:vsplit +normal\ gf),但有一个小问题:如果文件不存在,无论如何都会创建一个新窗口.这不会发生gf,也不<C-W>f.我也希望从"垂直分割上的光标下打开文件"命令中获得此行为.我怎样才能做到这一点?
在用GCC 4.7.2和Clang 3.1编译一些C++ 11代码时,我遇到了一个问题,Clang没有设法推断出GCC成功的模板参数.在更抽象的形式中,代码如下所示:
SRC/test.cc:
struct Element {
};
template <typename T>
struct FirstContainer {
};
template <typename T, typename U = Element>
struct SecondContainer {
};
template <template <typename> class Container>
void processOrdinary(Container<Element> /*elements*/) {
}
template <template <typename, typename> class Container>
void processOrdinary(Container<Element, Element> /*elements*/) {
}
template <template <typename, typename...> class Container>
void processVariadic(Container<Element> /*elements*/) {
}
int main() {
// This function instantiation works in both GCC and Clang.
processOrdinary(FirstContainer<Element>{});
// This function instantiation works in …Run Code Online (Sandbox Code Playgroud) 我正在用C++实现一个自定义词法分析器,当试图读取空格时,ifstream将不会读取它.我正逐字逐句阅读>>,所有的空白都消失了.是否有任何方法可以让ifstream保留所有的空白并将其读出来给我?我知道在阅读整个字符串时,读取将停留在空白处,但我希望通过逐字逐句阅读,我会避免这种行为.
尝试:.get(),由许多答案推荐,但它具有相同的效果std::noskipws,即,我现在获得所有空格,但不是我需要的一些构造的新行字符.
这是违规代码(扩展评论被截断)
while(input >> current) {
always_next_struct val = always_next_struct(next);
if (current == L' ' || current == L'\n' || current == L'\t' || current == L'\r') {
continue;
}
if (current == L'/') {
input >> current;
if (current == L'/') {
// explicitly empty while loop
while(input.get(current) && current != L'\n');
continue;
}
Run Code Online (Sandbox Code Playgroud)
我正在打破这一while行并查看其中的每个值current,\r或者\n肯定不在其中 - 输入只是跳到输入文件中的下一行.
我已经编程了很多年的c/c ++,但今天的偶然发现让我有点好奇......为什么两个输出在下面的代码中产生相同的结果?(arr当然是地址arr[0],即指向arr[0].我本来希望&arr是该指针的地址,但它具有相同的值arr)
int arr[3];
cout << arr << endl;
cout << &arr << endl;
Run Code Online (Sandbox Code Playgroud)
备注:这个问题已经结束,但现在又被打开了.(谢谢 ?)
我知道&arr[0]并arr评估相同的数字,但这不是我的问题!问题是为什么&arr和arr评估相同的数字.如果arr是文字(不存储任何软件),那么编译器应该抱怨并说这arr不是左值.如果地址arr存储在某个地方,那么&arr应该给我该地点的地址.(但这种情况并非如此)
如果我写
const int*arr2 = arr;
那么arr2[i]==arr[i]对于任何整数i,但是&arr2 != arr.
这些函数c32rtomb和mbrtoc32来自C Unicode TR(草案)中的<cuchar>/ <uchar.h>描述为执行UTF-32 1和"多字节字符" 之间的转换.
(...)如果
s不是空指针,则该c32rtomb函数确定表示与由c32(包括任何移位序列)给出的宽字符对应的多字节字符所需的字节数,并将多字节字符表示存储在数组中,第一个元素是指向的s.(......)
什么是"多字节字符表示"?我实际上对以下程序的行为感兴趣:
#include <cassert>
#include <cuchar>
#include <string>
int main() {
std::u32string u32 = U"this is a wide string";
std::string narrow = "this is a wide string";
std::string converted(1000, '\0');
char* ptr = &converted[0];
std::mbstate_t state {};
for(auto u : u32) {
ptr += std::c32rtomb(ptr, u, &state);
}
converted.resize(ptr - &converted[0]);
assert(converted == narrow);
}
Run Code Online (Sandbox Code Playgroud)
它中的断言是否保证保持 …
我知道默认情况下不应该启用编程语言的实验性功能,所以我欢迎使用标志-std=c++0x和-std=c++1y.但是,C++ 11现在已经成为标准.为什么编译器仍需要-std=c++11启用对其功能的支持?
我想在这件事上提供一些帮助,
例:
public class A {
private void foo() {
//Who Invoked me
}
}
public class B extends A { }
public class C extends A { }
public class D {
C.foo();
}
Run Code Online (Sandbox Code Playgroud)
这基本上就是这种情况.我的问题是方法foo()怎么知道谁在调用它?
编辑:基本上我试图做一个数据库层,在类AI中将创建一个将生成SQL语句的方法.通过获取调用类的所有公共属性的值来动态生成此类语句.
我有一个不可变的递归类型:
public sealed class Foo
{
private readonly object something;
private readonly Foo other; // might be null
public Foo(object something, Foo other)
{
this.something = something;
this.other = other;
}
public object Something { get { return something; } }
public Foo Other { get { return other; } }
}
Run Code Online (Sandbox Code Playgroud)
我需要实例化这种相互引用的两个对象,即a.Other == b && b.Other == a.
我不想放弃不变性不变量,因为Foo它旨在用作flyweight.我可以(并且我认为必须)放弃readonly这些字段,并保持"胆量"可变,但公共接口必须是不可变的.
是冰棍不变性来完成这件事的唯一途径?
我正在尝试为一系列类型建模.每种类型都有一个名称和几个属性.每个属性都有一个名称和一个类型.有一些相互递归的类型,这就是出现这个问题的地方.
在以下代码中:
std::atomic<int> myint; //Shared variable
//(...)
if( --myint == 0) {
//Code block B
}
Run Code Online (Sandbox Code Playgroud)
是否有可能多个线程访问名为"代码块B"的块?
请考虑溢出不会发生,'if'由多个线程同时执行,整个程序中对myint的唯一修改是if中的--myint和myint初始化为正值.