从语法的角度来看,我已经看过"volatile"关键字在C++函数中有多少用法?关于在函数上使用volatile关键字,但没有明确解释该问题的案例1做了什么.只有一位受访者表示这似乎毫无意义/无用.
然而,我不能完全接受这种说法,因为GNUC的AES软件实现已经使用了几年,它们有许多这样的功能:
INLINE volatile void functionname( /* ... */ ) {
/* ... */
asm( /* ... */ ) // embedded assembly statements
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
必须有这种用法的原因.谁能:
一.告诉我原来的原因是什么; 和
乙.现在如何达到理想的效果?
我正在使用Ubuntu和GCC 4.6.3.
void fatal( /* ... */ ) { /* ... */ exit(1); }
typedef void voidfn ();
volatile voidfn fatal;
Run Code Online (Sandbox Code Playgroud)
这将允许编译器识别'致命'不会返回.
但是这种情况似乎不适用于AES代码.自从我在集会上做了很多事以来,已经有很长一段时间了,但我想我会认识到跳跃或类似的事情.
我正在开发一个部署到Wildfly的项目,我正在使用Maven来构建它.这是一个包含多个war/jar/ear文件的复杂项目,因此有一个父pom.xml,其中包含以下内容:
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.wildfly.bom</groupId>
<artifactId>jboss-javaee-7.0-with-all</artifactId>
<version>8.1.0.Final</version>
<type>pom</type>
<scope>import</scope>
</dependency>
...
</dependencies>
</dependencyManagement>
...
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的BOM不包括我知道的默认Wildfly 8.1.0.Final发行版中的各种jar文件.特别是,这个问题的原因是cxf-api jar文件.我知道它位于Wildfly的这个位置:
wildfly-8.1.0.Final/modules/system/layers/base/org/apache/cxf/main/cxf-api-2.7.11.jar
Run Code Online (Sandbox Code Playgroud)
但它不是由为Wildfly推荐的BOM管理的.
如何正确地将cxf-api和类似的jar文件添加到项目的pom.xml中,最好不必单独指定每个文件?当然,我可以这样做:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-api</artifactId>
<version>2.7.11</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但我真的不必为每个已经属于Wildfly的jar文件执行此操作.
是否有我可以导入的BOM?
这必须是一个愚蠢的简单问题,但我无法找到答案,尽管多次搜索Google多次,并挖掘Calc文档.
通过Calc运行GIVEN Emacs实例,并执行多个计算,包括存储变量和方程式,其中一些可能来自"〜/ .emacs.d/calc.el"文件,
如何在不重新启动Emacs的情况下将Calc返回到原始状态?
原始:堆栈上没有任何东西.没有任何东西在路上.没有存储的变量或方程式.等等.
Compiler: g++ 4.4.3 Boost...: 1.49.0 OS......: Ubuntu
注意:自从我认真使用C++已有15年了,所以我正在重新学习和学习新东西,因为我也尝试学习Boost.
给出以下代码:
1. class Beta {
2. public:
3. std::string name();
4. }
5.
6. class Alpha {
7. public:
8. Beta m_beta;
9. }
10.
11. Alpha one;
Run Code Online (Sandbox Code Playgroud)
由于各种原因,我想使用boost:bind来实现与调用"one.m_beta.name()"相同的结果.我认为以下会这样做:
12. boost::function<std::string(Alpha)>
13. b = boost::bind(
14. &Beta::name,
15. boost::bind(&Alpha::m_beta, _1)
16. );
17. cout << "NAME = " << b(one) << "\n";
Run Code Online (Sandbox Code Playgroud)
但是当我编译(在Ubuntu上的g ++ 4.4.3)时,我收到以下错误:
错误:从'const Beta*'无效转换为'Beta*'
在查看由第13-16行产生的实际类型定义之后,看起来第15行变为'const Beta*',但是包装它的绑定期望'Beta*'.
但是,这个DOES工作:
30. boost::function<std::string(Beta)>
31. p1 = boost::bind(&Beta::name,_1);
32. boost::function<Beta(Alpha)>
33. p2 = boost::bind(&Alpha::m_beta,_1); …
Run Code Online (Sandbox Code Playgroud)