我有一些问题解决了我的一项任务.我在网上搜索过文档,但我找不到简明的答案.
我必须以十六进制,十进制和八进制形式打印常量eg123456789.
我知道0x是十六进制,0是十进制,没有八进制.但我没有想法如何打印它.我使用#define方法来定义我的常量
#include <stdio.h>
#include <stdlib.h>
#define CONST 123456789
int main()
{
printf("%d",0xCONST);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
我试图基于传递变量的单个部分来检查已定义的变量.(变量的其余部分是静态的,并且它的所有其他部分都是相同的),所以我做了一个测试,以确定这是否可行.
它不起作用,但也许我正在做一些容易修复的小事.
define('TEST', 'works');
$test = 't';
echo TES . strtoupper($test);
echo eval('TES . strtoupper('.$test.');');
echo eval('TES . strtoupper(\'$test\');');
echo eval('TES' . strtoupper($test) . ';');
Run Code Online (Sandbox Code Playgroud) 那么这个问题可能与这些问题有相当多的重叠:
如何在类中初始化const成员变量
C++11中
的const成员变量在对象构造后初始化const成员变量
然而,这些都不能回答我最初的问题。主要区别在于我不想使用设置值而是使用构造函数参数进行初始化。
我想做的是这样的——
class myRectangle {
private:
const int length; //const mainly for "read-only" like
const int breadth; //protection
public:
myRectangle(int init_length, int init_breadth);
int calcArea(void);
void turn90Degrees(void);
/* and so on*/
Run Code Online (Sandbox Code Playgroud)
}
其中长度和宽度都是只读的,在构造后不会改变它们。
但当然,我的编译器不会允许我将它们设置在构造函数中,因为它们实际上是const的......
我没有拿出解决办法只是让他们变和只实现getter方法,使他们不能有效地改变,但我几乎感觉我在这里错过了明显的解决方案。
另外我觉得我在某种程度上误解了 const 的使用。那么,从那时起不更改数据是否“已经”成为编译时合同?因为在我的理解中,不知道常量在程序执行过程中占用的大小是否足够信息?
顺便说一句,使恒定静态的解决方案不适合我,因为我生成的每个矩形都应该有不同的大小。
感谢您的回答和澄清!
解决方案:初始化列表/委托构造函数
nvcc设备代码可以访问内置值,warpSize该值设置为执行内核的设备的warp大小(即在可预见的将来为32).通常你不能把它区分为常数 - 但是如果你试图声明一个长度为warpSize的数组,你就会抱怨它是非常量的...(使用CUDA 7.5)
所以,至少为了这个目的,你有动力去做(编辑):
enum : unsigned int { warp_size = 32 };
Run Code Online (Sandbox Code Playgroud)
在你的标题中的某个地方.但是现在 - 我应该选择哪个,何时?:warpSize,或warp_size?
编辑: warpSize显然是PTX中的编译时常量.问题仍然存在.
我想知道最有可能使用什么,是interface Constants还是class Constants?
我有一个interface类似这样的代码:
public interface IConstantsVariableSupport {
public String URL = "www.sample-me.com";
public Integer LIMIT = 50;
}
Run Code Online (Sandbox Code Playgroud)
这interface将支持所有class需要其属性常量的内容。我认为我可以在其中class包含常量的情况下做到这一点,如下所示:
public class ConstantsVariableSupport {
public final static String URL = "www.sample-me.com";
public final static Integer LIMIT = 50;
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,当我用他们所拥有的支持其他类时,我会考虑什么方法constants。它是使用interface还是a class?或者,如果可能的话,您能否建议一种最佳实践来处理常量值,以便于在整个程序中使用。仅供参考,我知道如何使用这两种方法,我只是想知道如何正确执行。
我正试图通过该函数将数据传递给我的第二个VC上的标签func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView).
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
print("Annotation selected")
if let annotation = view.annotation as? POIAnnotations {
let destVC : ShopDetailViewController
destVC.shopName.text = annotation.title!
print("Your annotation title is: \(annotation.title!)")
}
}
Run Code Online (Sandbox Code Playgroud)
当我设置shopName.text为annotation.title,我得到一个错误说明:
在初始化之前使用常量'destVC'.
我不太清楚出了什么问题.
在Ubuntu 14.04 LTS上运行Perl 5.18,我想创建一些路径名常量,所以我做了
use Path::Class;
use constant FILEPATH => file('directory', 'filename');
Run Code Online (Sandbox Code Playgroud)
但是,当我在哈希聚合中使用常量时......
my $hash = { filepath => FILEPATH };
use Data::Dumper;
print Dumper $href;
Run Code Online (Sandbox Code Playgroud)
...我惊讶地发现filepath密钥的值是一个有福的引用,而不是我期望的函数调用的字符串结果.
我可以解决这个问题...
use constant FILEPATH => file('directory', 'filename') . "";
Run Code Online (Sandbox Code Playgroud)
...迫使Perl解释器评估祝福的参考,但是
(a)有更好的方法,(b)到底发生了什么?!
我知道use constant在列表上下文中进行评估,但通常use constant MYCONST => mysub(arg1, arg2);做正确的事情,评估子例程调用并使用返回值.什么是聪明Path::Class::file才能打破这种期望?
我有一个名为的类Bar:
class Bar {
private readonly foo: string;
constructor() {
this.foo = "foo";
}
}
Run Code Online (Sandbox Code Playgroud)
在我的主文件中,我试图像这样使用它:
const bar: Bar = new Bar();
Run Code Online (Sandbox Code Playgroud)
但是这一行给了我错误:
在声明之前使用的类“Bar”。
我可以将它var设为a并在函数内声明它,但我正在寻找一个更好的解决方案,它允许我将它声明bar为一个常量。
问题是 Typescript 将项目编译成单个 Javascript 文件,该文件在尝试使用后声明了该类。
尽管@Fenton的解决方案工作正常。还有另一种:
在里面tsconfig.json你可以输入:
"files": [
"libs/Bar.ts",
],
"include": [
"**/*"
]
Run Code Online (Sandbox Code Playgroud)
这将告诉 Typescriptlibs/Bar.ts在其他之前编译。
Go具有任意大小和精度的无类型精确数字常量。该规范要求所有编译器支持至少256位的整数,并且至少浮动272位(尾数为256位,指数为16位)。因此,要求编译器忠实准确地表示如下表达式:
const (
PI = 3.1415926535897932384626433832795028841971
Prime256 = 84028154888444252871881479176271707868370175636848156449781508641811196133203
)
Run Code Online (Sandbox Code Playgroud)
这很有趣......,但我无法找到任何方式实际使用任何这种持续超过64位的具体类型的最大精度int64,uint64,float64,complex128(这只是一对float64值)。即使是标准库中的大数字类型 big.Int,big.Float也无法从大数字常量中进行初始化-必须从字符串常量或其他表达式中反序列化它们。
基本机制很明显:这些常量仅在编译时存在,并且必须强制为某个可在运行时表示的值才能在运行时使用。它们是仅在代码中和编译期间存在的语言构造。您无法在运行时检索常量的原始值;它不存储在已编译程序本身的某个地址中。
因此问题仍然存在:为什么在实践中无法使用巨大的常量时,语言为什么要这么点呢?
我正在尝试学习 C++,当我尝试运行我正在创建的这个简单程序时,出现以下错误。
Error C3867 'budget::check_mort': non-standard syntax; use '&' to create a pointer to member
Error C3867 'budget::check_car': non-standard syntax; use '&' to create a pointer to member
Error C3867 'budget::check_groc': non-standard syntax; use '&' to create a pointer to member
Error C3867 'budget::check_util': non-standard syntax; use '&' to create a pointer to member
Run Code Online (Sandbox Code Playgroud)
我不太确定从这里该去哪里。搜索问题似乎表明需要将某些东西设为静态或常量,但我不太确定。任何帮助将非常感激。
使用 Visual Studio 社区和 Windows 10 文件如下:
.h 文件
#pragma once
#include <iostream>
#include <string>
#include <ostream>
#include <list>
#include <algorithm>
#include <numeric>
#include <windows.h> …Run Code Online (Sandbox Code Playgroud)