在Scott Meyers的"Effective STL"一书中,有一个将整个文本文件读入std :: string对象的好例子:
std::string sData;
/*** Open the file for reading, binary mode ***/
std::ifstream ifFile (“MyFile.txt”, std::ios_base::binary); // Open for input, binary mode
/*** Read in all the data from the file into one string object ***/
sData.assign (std::istreambuf_iterator <char> (ifFile),
std::istreambuf_iterator <char> ());
Run Code Online (Sandbox Code Playgroud)
请注意,它以8字节字符的形式读取.这非常有效.最近虽然我需要读取包含Unicode文本的文件(即每个字符两个字节).但是,当我尝试(天真地)更改它以将数据从Unicode文本文件读取到std :: wstring对象时,如下所示:
std::wstring wsData;
/*** Open the file for reading, binary mode ***/
std::wifstream ifFile (“MyFile.txt”, std::ios_base::binary); // Open for input, binary mode
/*** Read in all the data from the file …Run Code Online (Sandbox Code Playgroud) 以下程序使用gcc 4.8.1编译时没有错误或警告
-Wall -std=c++11:
template<unsigned N>
struct A{};
int main(){
A<1-2> a;
(void)a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用相同选项的clang 3.3会出现此错误:
错误:非类型模板参数的计算结果为-1,不能缩小为'unsigned int'类型[-Wc ++ 11-narrowing]
根据这个问题,看起来gcc的现行政策只是为了缩小标准指示错误的转换,以及clang给出指示错误的警告.但在这种情况下,gcc甚至没有发出警告.
标准第8.5.4/7节(在该问题中再现)中缩小转换错误的例子都没有涵盖非类型模板参数缩小转换的情况,但是§14.3.2/ 5标准说:
对于积分或枚举类型的非类型模板参数,将应用转换常量表达式(5.19)中允许的转换.
并且§5.19/ 3说:
T类型的转换常量表达式是一个文字常量表达式,隐式转换为类型T,其中隐式转换(如果有)在文字常量表达式中是允许的,而隐式转换序列仅包含用户定义的转换,lvalue-to- 除缩小转化次数之外的右值转换(4.1),整数促销(4.5)和积分转换(4.7)(8.5.4)
(我的重点).
在我看来,这意味着即使按照自己的标准,gcc也是错误的,在这种情况下根本没有诊断出变窄的转换.我读得对吗?是否存在基于标准的反驳论点?
我更多的感觉只是好奇心问这个问题.在递归TMP设置中,clang在这种情况下的错误诊断将查明无符号非类型模板参数通过0的错误,而从gcc获得的所有错误都是"超出最大模板实例化深度".
我正在制定一个提出功能头功能的提议constexpr.(std::invoke,std::reference_wrapper,std::bind,std::mem_fn,std::not_fn)
我已经了解到添加constexpr可以破坏现有代码,因为constexpr函数是急切实例化的.
template<class T>
int f(T){
return T::not_existing_member;
}
template<class T>
constexpr int g(T){
return T::not_existing_member;
}
int main(){
decltype(f(0)) a; // Well-formed
decltype(g(0)) b; // Ill-formed if the function body is instantiated
}
Run Code Online (Sandbox Code Playgroud)
GCC编译这段代码,clang没有.我在我的提议中描述了如何使用示例来处理带有重载的急切实例化std::bind.
你能告诉我编译器必须在标准中描述的位置,以及何时允许实例化一个功能模板?
更确切地说,我想知道在以下示例中,GCC和clang的相同行为是由标准强制执行还是实现定义:
template<class T>
struct Foo{
constexpr int f(){
return 0;
}
constexpr int f()const{
return T::not_existing_member;
} …Run Code Online (Sandbox Code Playgroud) 你能详细说明Python中"块"(在Ruby意义上)的当前状态吗?
Python中存在哪些语言结构?他们如何与其他语言(如Ruby,Smalltalk,[插入更多])进行比较?或者Python缺乏这样的结构?
到目前为止,我已经理解了这lambda件事; 它只是单行,但也许它接近.yield在这种情况下,"装饰者"怎么样?
我也在一些项目中使用旧的Python版本.在Python版本(2.5,2.6等)或未来版本中计划引入哪些构造?
您是否可以链接有关该主题的有趣文章来解释Python的这些内容以及与其他语言进行比较,对于想要扩展基本Python知识的人来说可能会有趣吗?
符号|是什么意思 意味着依赖列表中,例如
foobar: foo | bar
do_something ....
Run Code Online (Sandbox Code Playgroud)
其中foo和bar是 makefile 生成的目标。
我想UIImageView多次闪光.
目前我不知道该怎么做.
-(void)arrowsAnimate{
[UIView animateWithDuration:1.0 animations:^{
arrow1.alpha = 1.0;
arrow2.alpha = 1.0;
arrow3.alpha = 1.0;
NSLog(@"alpha 1");
} completion:^(BOOL finished){
[self arrowsAnimate2];
}];
}
-(void)arrowsAnimate2{
[UIView animateWithDuration:1.0 animations:^{
arrow1.alpha = 0.0;
arrow2.alpha = 0.0;
arrow3.alpha = 0.0;
NSLog(@"alpha 0");
} completion:^(BOOL finished){;}];
}
Run Code Online (Sandbox Code Playgroud)
后来我称之为:
for (int i = 0;i < 10; i++){
[self arrowsAnimate]; }
Run Code Online (Sandbox Code Playgroud)
这给了我10x alpha 1,然后是10x alpha 0.在中间我们只看到一个动画.有什么建议?
谢谢.
我的问题很简单.在Linux上,使用fork而不使用exec非常流行
但是,我发现在MacOS上这是不可能的(参见fork手册)
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/fork.2.html
您在子进程中可以做的事情是有限的.为了完全安全,你应该自己限制自己只执行异步信号安全操作,直到调用其中一个exec函数为止.除非明确记录为安全或异步信号安全,否则在fork()之后,应假定任何框架或库中的所有API(包括全局数据符号)都是不安全的.如果您需要在子进程中使用这些框架,则必须执行.在这种情况下,执行自己是合理的.
这对我来说很奇怪?是什么原因?有可能解决它吗?
我想在RAM中创建一个部分,分配一个特定的大小并将其放在一个地址?是否可以在不传递链接描述文件"文件"或不修改现有链接描述文件的情况下执行所有这些操作?
.myspace :
{
. = 0x10000;
. = . + STACK_SIZE;
} > ram
Run Code Online (Sandbox Code Playgroud)
是否可以在GNU LD/GCC的命令行中使用链接描述文件完成所有操作?
假设您有以下课程:
struct A {
A () {}
A (A &) = delete;
};
int main() {
std::pair<A, int> p1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下代码将无法编译(使用-std=c++11with g++),并出现以下错误:
/usr/include/c++/5/bits/stl_pair.h:在'struct std :: pair'的实例化中:
test.cpp:13:23:从这里要求
/usr/include/c++/5/bits/stl_pair.h:127:17:错误:'constexpr std :: pair <_T1,_T2> :: pair(const std :: pair <_T1,_T2>&)[与_T1 = A; _T2 = int]'声明采用const引用,但隐式声明将采用非const
Run Code Online (Sandbox Code Playgroud)constexpr pair(const pair&) = default;
根据错误消息,我认为这是因为由于参数const上的限定符,无法实现默认的复制构造std::pair函数.
我可以理解为什么没有这个就不能编译= delete,因为不可能实现带std::pair const&参数的复制构造函数.
但是= delete,我希望编译器不会实例化这样的构造函数,因为它不能(据我所知).实际上,这个拷贝构造函数被删除,如下面这段代码所示:
std::pair<A, int> p1;
decltype(p1) p2(p1);
Run Code Online (Sandbox Code Playgroud)
失败了:
test.cpp:11:23:错误:使用已删除的函数'constexpr std :: pair <_T1,_T2> …
我正在编写一个旨在用作机械设计和仿真工作流程一部分的应用程序,我们希望能够使用Three.js来加载和可视化Solidworks中设计的部件,这些部件可以作为STL导出(文字或二进制).
**我完全认识到可以使用类似Meshlab的东西转换为OBJ或其他格式,但这似乎是一个不必要的额外步骤,会阻碍工作流程.**
看起来Three.js有很好的Collada,OBJ,UTF-8,VTK和JSON加载解决方案,但是没有干净的STL支持示例.我看到过去曾经使用过的东西,例如 https://github.com/tbuser/thingiview.js/blob/master/javascripts/thingiloader.js ,由于许可证我想避免,和 https://github.com/tbuser/three.js/blob/master/utils/stl_geometry.js 似乎没有完全集成.
我错过了什么吗?
c++ ×4
c ×2
c++11 ×2
constexpr ×1
constructor ×1
exec ×1
fork ×1
gcc ×1
gnu-make ×1
ipad ×1
javascript ×1
lambda ×1
ld ×1
linker ×1
loader ×1
macos ×1
makefile ×1
narrowing ×1
non-type ×1
objective-c ×1
python ×1
ruby ×1
stl-format ×1
templates ×1
three.js ×1
uiview ×1
unicode ×1
wifstream ×1
wstring ×1