由于在运行时可能会调用声明为constexpr的函数,编译器在哪个条件下决定是在编译时还是在运行时计算它?
template<typename base_t, typename expo_t>
constexpr base_t POW(base_t base, expo_t expo)
{
return (expo != 0 )? base * POW(base, expo -1) : 1;
}
int main(int argc, char** argv)
{
int i = 0;
std::cin >> i;
std::cout << POW(i, 2) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我在编译时是未知的,这可能是编译器将POW()视为在运行时调用的常规函数的原因.然而,这种动态虽然看起来很方便,但却具有一些不切实际的含义.例如,是否有一种情况我希望编译器在编译时计算constexpr函数,编译器决定将其视为普通函数,而它在编译时也会工作?有任何已知的常见陷阱吗?
我的iPhone应用程序连接到三个不同的服务器,例如:生产,登台和测试.应用程序使用了一堆配置值,具体取决于它连接到哪个服务器,例如Facebook App ID,TestFlight团队密钥等.
我想在GIT中进行所有设置,并且只选择应用程序在编译或发布时应该使用的配置.例如,选择测试时,产品 - >在XCode中运行运行连接到测试的应用程序的调试版本,产品 - >存档创建具有也连接到测试的发布版本的IPA文件.
我不想创建比调试和发布更多的构建配置(因为这意味着构建配置/运行时配置的6种不同组合).我认为,理想的解决方案是我有三种方案:生产,测试和登台,每个方案选择三个Info.plist文件中的一个用于应用程序.这将允许我不仅定义不同的运行时设置,还根据后端服务器定义不同的应用程序版本或包标识符.但是,除了选择不同的构建配置之外,我看起来不能以任何其他方式配置存档操作.任何想法,如果可以以任何方式实现?
编辑:为了使它更清晰,生产/暂存/测试是后端服务器,而不是iOS应用程序的版本.iOS应用程序有两个版本:debug/release.换句话说,我可能想运行连接到生产服务器的应用程序的调试版本,例如调试由该服务器返回的JSON引起的崩溃.为了清楚起见,我本可以将服务器命名为A,B和C.
假设我们有一个简单的Java程序,它只包含一个类:
public class HelloWorld {
private static void replacable(int i) {
System.out.println("Today is a nice day with a number " + i);
}
public static void main(String[] args) throws Exception {
for(int i = 0; i < 100000; ++i) {
replacable(i);
Thread.sleep(500);
}
}
Run Code Online (Sandbox Code Playgroud)
在编译并运行之后,输出将是:
今天是0号的好日子
今天是一个美好的一天,1号
今天是2号球员的好日子
今天是一个美好的一天,3号
...
我的问题:是否存在(或者是否存在)replacable在运行时交换方法的某种方式?有点像HelloWorld用新版本编写另一个版本replacable,编译它,然后在已经运行的JVM中编写旧版本?
所以,如果我像这样编写新版本:
private static void replacable(int i) {
System.out.println("Today is an even nicer day with a number " + i);
}
Run Code Online (Sandbox Code Playgroud)
是否有类似于Erlang的热代码交换,我可以这样做: …
在客户端计算机上遇到网络问题时,我希望能够运行一些命令行并将结果通过电子邮件发送给自己.
我发现Runtime.exec允许我执行任意命令,但在String中收集结果更有趣.
我意识到我可以将输出重定向到一个文件,然后从文件中读取,但我的蜘蛛侠意识告诉我有一种更优雅的方式.
建议?
C++是一种静态的编译语言,在编译期间解析模板等等......
但是有可能在运行时创建一个函数,这在源代码中没有描述,并且在编译期间还没有转换为机器语言,因此用户可以向它投入源中没有预料到的数据吗?
我知道这不可能以一种简单的方式发生,但肯定必须是可能的,有很多编程语言没有被编译并且动态创建那些用C或C++实现的东西.
也许如果创建了所有原始类型的工厂,以及将它们组织成更复杂的对象(如用户类型和函数)的合适数据结构,这是可以实现的吗?
欢迎提供有关该主题的任何信息以及指向在线资料的链接.谢谢!
编辑:我知道这是可能的,它更像是我对实现细节感兴趣:)
在一些__init__.py模块文件中,我看到了这样的单行:
__import__('pkg_resources').declare_namespace(__name__)
Run Code Online (Sandbox Code Playgroud)
它做了什么以及为什么人们使用它?假设它与在运行时动态导入和创建命名空间有关.
编译器书(The Dragon book)解释了在堆栈上创建的值类型,并在堆上创建了引用类型.
对于Java,JVM还在运行时数据区域中包含堆和堆栈.在堆上创建对象和数组,方法帧被推送到堆栈.所有线程共享一个堆,而每个线程都有自己的堆栈.下图显示了这一点:

有关Java运行时数据区的更多信息.
我不明白的是,由于JVM本质上是一个软件,那些JVM堆,堆栈和线程如何映射到物理机器?
如果有人可以比较Java和C++之间的这些概念,我将不胜感激.因为Java在JVM上运行,但C++没有.
为了使这个问题更加准确,我想知道以下内容:
更新:我为进程的运行时物理内存绘制了一张图片.

我目前正在疯狂地挖掘所有的文档,并没有找到我正在寻找的东西.我怀疑这是真正的哦!回答.
我只需要在主包中找到活动的故事板,并想知道执行此操作的最佳方法.
这样我就可以使用它[UIStoryboard storyboardWithName:@"XXX" bundle:mainBundle]来提取正在运行的故事板.
我知道如何通过打开成语来克服它,但我觉得这是一个... kludge.
这样做的正确方法是什么?
更新:
好.我找到了.
像往常一样,在Stack Overflow(官方Apple文档站点;)上.
这是我确定的代码:
UIStoryboard *st = [UIStoryboard storyboardWithName:[[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"] bundle:[NSBundle mainBundle]];
Run Code Online (Sandbox Code Playgroud)