--disable-hosted-libstdcxx
only build freestanding C++ runtime support
Run Code Online (Sandbox Code Playgroud)
从<gcc>/libstdc++-v3/configure --help.
这种独立模式是什么,有什么限制和好处?
对于我所知的很少,它看起来相当于 libstdc++ 的一些静态链接,但是如果您可以构建您的 *.a 库,那么这种“模式”的意义何在?这听起来不是一个很好的解释。
假设在一些C或C++代码中,我有一个名为的函数T fma( T a, T b, T c ),它执行1次乘法和1次加法,就像这样( a * b ) + c; 我该如何优化多个mul并添加步骤?
例如,我的算法需要用链接和求和的3或4个fma操作来实现,我怎么能写这个是一种有效的方式,在语法或语义的哪个部分我应该特别注意?
我还想了解关键部分的一些提示:避免更改CPU的舍入模式以避免刷新cpu管道.但是我很确定只是+在多次调用之间使用操作fma不应该改变它,我说"非常肯定",因为我没有太多的CPU来测试它,我只是遵循一些逻辑步骤.
我的算法类似于多个fma调用的总和
fma ( triplet 1 ) + fma ( triplet 2 ) + fma ( triplet 3 )
Run Code Online (Sandbox Code Playgroud) 我开始使用一些现代的Javascript,我决定使用Nodejs,因为它似乎是目前桌面上最流行的JS框架,我不明白为什么我的代码不起作用以及相关的错误我收到的消息.
考虑一下这个片段
var a = 5;
var func = function(){return arguments.length;};
process.stdout.write(+func(1,2,3,a));
Run Code Online (Sandbox Code Playgroud)
它不起作用,它会生成以下错误消息
net.js:612
throw new TypeError('invalid data');
^
TypeError: invalid data
at WriteStream.Socket.write (net.js:612:11)
at Object.<anonymous> (var_1.js:3:16)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
Run Code Online (Sandbox Code Playgroud)
我是一名C/C++程序员,这对我来说绝对神秘,而且我+在调用之前使用了一个func以确保结果是一个integer,所以为什么write要抱怨呢?
一些废话后添加一个+ '\n'使这个代码工作
var a = 5;
var func = function(){return arguments.length;};
process.stdout.write(+func(1,2,3,a) + '\n');
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释发生了什么?
#include <iostream>
#include <random>
#include <algorithm>
int main()
{
std::mt19937 mt;
std::uniform_int_distribution<int> d(0, 255);
int l = 500;
std::vector<int> k(l);
std::generate(k.begin(), k.end(), d(mt));
return(0);
}
Run Code Online (Sandbox Code Playgroud)
试图与这两个编译g++ 4.7.2和g++ 4.8.1像这样
g++ -std=c++11 main.cpp
Run Code Online (Sandbox Code Playgroud)
报告的错误是
In file included from /usr/include/c++/4.7/algorithm:63:0,
from main.cpp:3:
/usr/include/c++/4.7/bits/stl_algo.h: In instantiation of ‘void std::generate(_FIter, _FIter, _Generator) [with _FIter = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Generator = int]’:
main.cpp:11:42: required from here
/usr/include/c++/4.7/bits/stl_algo.h:5083:2: error: ‘__gen’ cannot be used as a function
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我没有任何关于可能出错的线索或想法.
在解释和创建函数参数的类型时,我很难理解为什么C++比C更"放松"的行为.
C做世界上最简单的事情,它坚持你写的东西就是这样,另一方面,C++以一种我无法理解的扭曲方式运作.
例如,流行的argv是一个char* []传递给函数的时候变成了char**,我真的不明白为什么,我期待和"想要" char * const *但是我得到了这种行为.
您还可以阅读PDF中讨论C和C++之间差异的文章,文章也以这句话结尾:
虽然C++在确定函数签名时会忽略参数声明中的顶级cv限定符,但它并不完全忽略这些cv限定符.
因为我在网上找不到这个问题(嵌入式系统编程 - 2000年2月,这个老问题是免费的),我想知道这句话可能意味着什么.
有人可以解释为什么这种行为是它在C++中的行为?
编辑:
我的一个例子是
#include <stdio.h>
void foo(int argc, const char *const *const argv) {
printf("%d %s\n", argc, argv[0]);
}
int main(int argc, char *argv[]) {
foo(argc, argv);
return (0);
}
Run Code Online (Sandbox Code Playgroud)
如果你编译它,gcc 4.8.1你得到预期的错误
gcc cv_1.c
cv_1.c: In function ‘main’:
cv_1.c:8:3: warning: passing argument 2 of ‘foo’ from incompatible pointer type [enabled by default]
foo(argc, argv);
^
cv_1.c:3:6: …Run Code Online (Sandbox Code Playgroud) 我试图写下一些我对多线程/并发场景感兴趣的数据结构的实现.
很多功能性的语言,几乎所有我知道的,设计自己的数据结构,以这样的方式,他们是不变的,所以这意味着如果你要添加value到一个实例t1的T,你真正得到的新实例T那包t1 + value.
container t;
container s = t; //t and s refer to the same container.
t.add(value); //this makes a copy of t, and t is the copy
Run Code Online (Sandbox Code Playgroud)
我在C++ 11中找不到合适的关键字; 标准库中有关键字,语义和函数,它们明确地面向功能方法,特别是我发现:
mutable它不是运行时,它更可能是编译器的提示,但是这个关键字并不能真正帮助您设计新的数据结构或以不可变的方式使用数据结构swap 对临时工作不起作用,这对我来说是一个很大的缺点我也不知道其他关键字/功能对这种设计有多大帮助,swap其中一个真的很接近好东西,所以我至少可以开始写东西,但显然它只限于lvalues.
所以我问:用C++ 11 设计不可变的数据结构是否可行?
我希望使用Mathjax将一些mathjax片段呈现为svg文件.
此时我相信表格中的一个命令
<javascript interpter> <Mathjax jax file> 'mathjax snippet here'
Run Code Online (Sandbox Code Playgroud)
应该工作,我不知道jax我应该选择哪个文件以及如何设置我想要的输出模式,或者从命令行调用它时如何配置mathjax.
我需要这个,因为我必须在没有浏览器的情况下使这个数学表达式脱机.
在C++中,您可以编写一个返回语句,如下所示:
return ( ... );
Run Code Online (Sandbox Code Playgroud)
这与更受欢迎的不同:
return ... ;
Run Code Online (Sandbox Code Playgroud)
特别是第一个版本返回包含该return语句的函数堆栈本地的东西的地址/引用.
既然为什么某些东西想要返回一个对那些在那时没有生命的东西的引用呢?
这个成语有什么用例?考虑到C++ 11和C++ 14的新流行语和功能,有不同的用法吗?
std::thread::get_id()为您提供了一个唯一标识给定线程的实现定义值,但对我来说有趣的是,有一个专用类型thread::id,这种类型是否在标准库中的任何位置使用?
A thread::id是在某个地方使用还是在你知道的任何界面中使用?这种类型的AFAIK无处使用,因此它目前看起来很无用.
要调查我用来运行ctags适当的选项的新文件,问题是显然这个程序并不支持C ++ 11,直到我发现该计划的发展,我刚刚以年前截止。
现在我需要一个用于 C++11 及更高版本的等效工具,我记得clang只有它能够输出AST任何给定文件的 ,所以我想知道前端是否具有与我以前使用ctags.
例如,这是您可以ctags在 C++ 模式下轻松列出的实体
ctags --list-kinds=c++
c classes
d macro definitions
e enumerators (values inside an enumeration)
f function definitions
g enumeration names
l local variables [off]
m class, struct, and union members
n namespaces
p function prototypes [off]
s structure names
t typedefs
u union names
v variable definitions
x external and forward variable declarations [off]
Run Code Online (Sandbox Code Playgroud)
是否clang能够执行类似的任务?