- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你如何构建一个 long long
在 gcc 中,类似于构造 int
通过 int()
以下在 gcc (4.6.3 20120306) 中失败(但例如通过 MSVC)。
myFunctionCall(someValue, long long());
expected primary-expression before 'long'
(列位置表示第一个长是位置)。
myFunctionCall(someValue, (long long)int());
int
并转换为
long long
- 表示 gcc 不喜欢
long long
医生。
long long()
它可能不符合标准long long
相当于文字 0LL
, 所以使用 myFunctionCall(someValue, 0LL)
typedef long_long_t long long
然后 long_long_t()
uint64_t
如果您在任何平台上追求一种正好是 64 位的类型,而不是至少 64 位的类型,但在不同平台上可能会有所不同。 最佳答案
我想要一个关于预期行为的明确答案,所以我 posted a question on comp.lang.c++.moderated
并得到了一些很好的答案作为返回。 感谢 Johannes Schaub、Alf P. Steinbach(均来自 SO)和 Francis Glassborrow 提供一些信息
这不是 GCC 中的错误 - 实际上它会跨越多个编译器 - GCC 4.6、GCC 4.7 和 Clang 提示类似的错误,如 primary expression expected before '('
如果你试试这个语法:
long long x = long long();
long()
是绑定(bind)的,但是
long long()
有一个免费的
long
)。带有空格的类型(如
long long
)不能使用
type()
-施工形式。
0LL
作为您的值(value),而不是尝试long long()
- 他们会产生相同的值(value)。long long
, 所以你可以 typedef
自己始终保证您拥有long long
输入,像这样:int main() {
typedef long long MyLongLong;
long long x = MyLongLong(); // or MyLongLong x = MyLongLong();
}
template<typename TypeT>
struct Type { typedef TypeT T(); };
// call it like this:
long long ll = Type<long long>::T();
int64_t
(来自 <cstdint>
),跨常见平台是 typedef long long int64_t
.这比此列表中的前面的项目更依赖于平台。int64_t
是 64 位的固定宽度类型,通常是 long long
的宽度在 linux-x86 和 windows-x86 等平台上。 long long
至少 64 位宽,但可以更长。如果您的代码只能在某些平台上运行,或者您确实需要固定宽度的类型,那么这可能是一个可行的选择。 {}
方式:long long ll{}; // does the zero initialization
std::common_type<T>
#include <type_traits>
int main() {
long long ll = std::common_type<long long>::type();
}
()
之间有真正的区别吗?并使用
0
进行初始化对于 POD 类型?
I don't think default ctor returns zero always - more typical behaviour is to leave memory untouched.
To default-initialize an object of type
T
means:— if
T
is a non-POD class type (clause 9), the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);— if
T
is an array type, each element is default-initialized;— otherwise, the object is zero-initialized.
long long
,
unsigned long
,
int
,
float
等都是标量/POD类型,所以调用这样的东西:
int x = int();
int x = 0;
#include <iostream>
template<typename T>
void create_and_print() {
T y = T();
std::cout << y << std::endl;
}
int main() {
create_and_print<unsigned long long>();
typedef long long mll;
long long y = mll();
long long z = 0LL;
int mi = int();
}
g++ -fdump-tree-original construction.cxx
;; Function int main() (null)
;; enabled by -tree-original
{
typedef mll mll;
long long int y = 0;
long long int z = 0;
int mi = 0;
<<cleanup_point <<< Unknown tree: expr_stmt
create_and_print<long long unsigned int> () >>>>>;
<<cleanup_point long long int y = 0;>>;
<<cleanup_point long long int z = 0;>>;
<<cleanup_point int mi = 0;>>;
}
return <retval> = 0;
;; Function void create_and_print() [with T = long long unsigned int] (null)
;; enabled by -tree-original
{
long long unsigned int y = 0;
<<cleanup_point long long unsigned int y = 0;>>;
<<cleanup_point <<< Unknown tree: expr_stmt
(void) std::basic_ostream<char>::operator<< ((struct __ostream_type *) std::basic_ostream<char>::operator<< (&cout, y), endl) >>>>>;
}
0
初始化。 ,即使我使用构造函数样式的默认初始化,例如
int mi = int()
. GCC 将生成只执行
int mi = 0
的代码.
typename T
进行默认构造, 其中
T = unsigned long long
, 也只产生了一个
0
- 初始化代码。
0
.
关于gcc - 构造一个 'long long',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10527441/
谁能解释一下原因: (define a (lambda() (cons a #f))) (car (a)) ==> procedure ((car (a))) ==> (procedure . #f)
这是 PyBrain 网站的摘录。我了解大部分正在发生的事情,但是一行让我完全难住了。我以前从未在 python 代码中看到过这样的东西。这是整个循环,对于上下文: for c in [0,
我是gradle / groovy的新手。我想创建将做一些事情的自定义任务。我的第一个问题是任务完成时该如何做?我可以覆盖doFirst / doLast闭包吗?也许我可以重写某些在开始和结束时都会执
我刚刚开始评估 MS 企业库。他们使用以下指令来获取实例: var customerDb = EnterpriseLibraryContainer.Current.GetInstance("C
这是我的 if else Ansible 逻辑.. - name: Check certs exist stat: path=/etc/letsencrypt/live/{{ rootDomain
我正在使用construct 2.8 对一些失传已久的 Pascal 程序创建的一些文件的 header 进行逆向工程。 header 由许多不同的记录组成,其中一些是可选的,我不确定顺序是否固定。
我在将 getchar() 的输入放入 char *arr[] 数组时遇到问题。我这样做的原因是因为输入数据(将是一个带有命令行参数的文件)将存储在一个 char 指针数组中以传递给 execvp 函
通常我们不能约束类型参数 T派生自密封类型(例如 struct 类型)。这将毫无意义,因为只有一种类型适合,因此不需要泛型。所以约束如下: where T : string 或: where T :
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
#include using namespace std; class A { private: int m_i; friend int main(int argc, char cons
这个问题在这里已经有了答案: Are there legitimate uses for JavaScript's "with" statement? (33 个答案) 关闭 9 年前。 我有这个代
在this answer我看到了下一个 Bash 结构。 yes "$(< file.txt)" 什么意思 "$(< file.txt)" ? 我明白了 命令替换 - $(command)用命令的结
if (a == 1) //do something else if (a == 2) //do something else if (a == 3) //do somethi
关于构造的快速简单的问题。 我有以下用于将项目添加到 ListView 的代码。 ListViewItem item = new ListViewItem(); item.Text = file; i
我想使用 std::vector 来控制给定的内存。首先,我很确定这不是好的做法,但好奇心占了上风,无论如何我都想知道如何做到这一点。 我遇到的问题是这样的方法: vector getRow(unsi
下面显示了一段简单的javascript: var mystring = ("random","ignored","text","h") + ("ello world") 这个字符串会生成 hello
在 Java 中,创建对象的标准方法是使用 MyClass name = new MyClass(); 我也经常看到构造 new MyClass() { /*stuff goes in here*/
我正在编写 C++ ndarray 类。我需要动态大小和编译时大小已知的数组(分别分配自由存储和分配堆栈)。我想支持从嵌套的 std::initializer_list 进行初始化。 动态大小的没问题
我正在将一个项目从 Visual Studio 2005 转换为 Visual Studio 2008,并提出了上述结构。 using Castle.Core.Resource; using Cast
我想知道我在这里的想法是否正确,我主要针对接口(interface)进行编程,所以我想知道下面的类是否应该通过 DI 注入(inject),或者我应该自己实例化一个类... 注意:这些服务保存在我的核
我是一名优秀的程序员,十分优秀!