小编Sta*_*kER的帖子

为什么C++不允许模板重载?

有时我想写两个模板,如:

template <typename Type1>
class A{
    ...
};

template <typename Type1, typename Type2>
class A{
    ...
};
Run Code Online (Sandbox Code Playgroud)

但似乎有两个共享相同名称但具有不同参数的模板是非法的.我必须这样命名A_1,A_2.我认为如果我可以这样做,特别是在实现Functors时可能会有用.

为什么C++不允许这样?在某些情况下难以实施或模糊吗?这将在更高版本的C++上得到支持吗?

c++ templates

6
推荐指数
1
解决办法
261
查看次数

init.rc在flash后第一次启动时没有启动我的服务

我有一个服务,我试图从Android中的init.rc文件开始.它看起来像这样:

service myapp /data/local/myapp --daemon  
 class core  
 user root  
 group root  
 oneshot
Run Code Online (Sandbox Code Playgroud)

问题是'myapp'在重启后启动正常,但在刷新设备映像后没有在第一次启动时启动.

从日志中,我注意到在第一个启动日志中,我从/ dev/log/system下的应用程序接收了一个日志(我编辑的内核代码已触发,检查以确认我的应用程序在那里)

但是我没有收到显示我正在尝试实际运行它的日志(因为init.rc文件应该这样做)

重新启动后,我在/ dev/log/main下收到两个日志( - 验证和执行)...

permissions boot android init

5
推荐指数
0
解决办法
1586
查看次数

如果没有 Sim 卡,TelephonyManager.getDeviceId 是否可以工作?

我有一个简单的问题 :

 TelephonyManager.getDeviceId();
Run Code Online (Sandbox Code Playgroud)

设备中没有 Sim 卡(SIM_STATE_ABSENT)也能工作吗?

android

5
推荐指数
1
解决办法
2854
查看次数

"x"在目录中的rwx中意味着什么?

我有一个testdir mkdir testdir,并在其中创建了一个文件touch testdir/a.

drwxr-xr-x  2 jermaine     jermaine       4096 Mar 12 22:57 testdir
Run Code Online (Sandbox Code Playgroud)

如果我删除'x' chmod -x testdir

然后我将无法做到

cd testdir

touch testdir/b

ls -l testdir

cat testdir/a
Run Code Online (Sandbox Code Playgroud)

所以我的问题是为什么我不能列出具有'r'但没有'x'的目录下的文件层次结构?'x'究竟在目录上的含义是什么?

我知道一些解释,比如"x表示进入指挥,你必须在读写之前进入".但"进入"意味着什么?我非常感谢inode或dentry级别的答案.非常感谢.

unix linux security

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

我什么时候可以自信地用-O3编译程序?

我见过很多人抱怨-O3选项:

GCC:程序不适用于编译选项-O3

浮点问题由David Hammen提供

我查看GCC的手册:

   -O3    Optimize yet more.  -O3 turns on all optimizations
          specified   by   -O2   and   also   turns  on  the
          -finline-functions and -frename-registers options.
Run Code Online (Sandbox Code Playgroud)

我还确认了代码,以确保两个选项是-O3包含的唯一两个优化:

if (optimize >= 3){
    flag_inline_functions = 1;
    flag_rename_registers = 1;
}
Run Code Online (Sandbox Code Playgroud)

对于这两个优化:

-finline-functions在某些情况下很有用(主要是使用C++),因为它允许我们使用-finline-limit定义内联函数的大小(默认为600).当设置高内联限制时,编译器可能会报告错误,抱怨内存不足.

-frename-registers通过利用寄存器分配后留下的寄存器来尝试避免调度代码中的错误依赖.这种优化最有利于具有大量寄存器的处理器.

对于内联函数,虽然它可以减少函数调用的数量,但它可能会导致大的二进制文件,因此-finline-functions可能会引入严重的缓存惩罚并且变得比-O2慢.我认为缓存处罚不仅取决于程序本身.

对于重命名寄存器,我认为它不会对像x86这样的cisc架构产生任何积极影响.

我的问题有2.5部分:

[Answerd] 1.我是否正确地声称程序是否可以使用-O3选项更快地运行取决于底层平台/架构?

编辑:第1部分已被确认为真.David Hammen还声称,对于优化和浮点运算如何在具有扩展精度浮点寄存器(如Intel和AMD)的机器上进行交互,我们应该非常小心.

2. 我什么时候可以自信地使用-O3选项?我认为这两个优化尤其是重命名寄存器可能会导致与-O0/O2不同的行为.我看到一些用-O3编译的程序在执行期间崩溃了,它是确定性的吗?如果我在没有任何崩溃的情况下运行一次可执行文件,是否意味着使用-O3是安全的?

编辑:确定性与优化无关,它是一个多线程问题.但是,对于多线程程序,当我们运行一次可执行文件而没有错误时,使用-O3是不安全的.David Hammen表明,浮点运算的O3优化可能违反严格的弱排序标准进行比较.当我们想要使用-O3选项时,是否还需要注意其他问题?

[回答] 3.如果第一个问题的答案是"是",那么当我更改目标平台或使用不同机器的分布式系统时,我可能需要在-O3和-O2之间进行更改.有没有一般的方法来决定我是否可以通过-O3获得性能提升?例如,更多寄存器,短内联函数等.

编辑:第3部分已被Louen回答为"各种各样的平台使这个问题无法解决这个问题"当评估-O3的性能提升时,我们必须尝试两者并对我们的代码进行基准测试,看看哪个更快.

c++ compiler-construction gcc compilation

4
推荐指数
1
解决办法
4338
查看次数

+++和---在JavaScript中意味着什么?

我的工作基于JSLint.我看到JSLint能够处理+++---操作.我在互联网上搜索了这些运营商,却一无所获

这两个运算符在JavaScript中意味着什么?

javascript jslint

4
推荐指数
1
解决办法
2140
查看次数