avatar
sequencing principle# Biology - 生物学
s*e
1
如果拿的是不要抽签的h1b,想换到一公司工作,是不是也是要在当年的4月1号递交工
作签证的申请?如果递交以后,原来的单位不愿意让我继续工作到10月1号等到抽签的
工作签证生效,是不是就等于没身份了?
新人求解,谢谢
avatar
s*z
2
比如我有两个ipad,一个ipad 1,一个ipad 2,我在ipad 1上买的app,能在新的ipad 2
上面免
费移植过去吗?
多谢
avatar
A*e
3
vector v = {4, 3, 2, 1}
set s1(v.begin(), v.end());
set s2({v.begin(), v.end()});
s1/s2的初始化都可以编译通过。s2没有必要,但s2到底调用了哪些ctor呢?
avatar
G*G
4
any article about sequencing principle?
next generation sequencing.
easy to understand
avatar
s*e
5
yes and yes.
avatar
M*n
6
itunes account

2

【在 s********z 的大作中提到】
: 比如我有两个ipad,一个ipad 1,一个ipad 2,我在ipad 1上买的app,能在新的ipad 2
: 上面免
: 费移植过去吗?
: 多谢

avatar
s*t
7
objdump一下就知道了

【在 A*******e 的大作中提到】
: vector v = {4, 3, 2, 1}
: set s1(v.begin(), v.end());
: set s2({v.begin(), v.end()});
: s1/s2的初始化都可以编译通过。s2没有必要,但s2到底调用了哪些ctor呢?

avatar
h*5
8
itunes, 可以装多台ipad
avatar
A*e
9
源码,用哪个选项能看函数调用?
#include
#include
using namespace std;
int main() {
vector v = {4, 3, 2, 1};
set s1(v.begin(), v.end());
set s2({v.begin(), v.end()});
}

【在 s*****t 的大作中提到】
: objdump一下就知道了
avatar
b*t
10
itunes

2

【在 s********z 的大作中提到】
: 比如我有两个ipad,一个ipad 1,一个ipad 2,我在ipad 1上买的app,能在新的ipad 2
: 上面免
: 费移植过去吗?
: 多谢

avatar
s*t
11
1:g++ -std=c++11 -g -o test test.cpp
2: objdump -S test |c++filt | less
找到你想找的函数(main)然后看看的call,结果大概是这个样子:
http://pastebin.com/Xr9p4DcC
补充:
- objdump :-S能够把代码 inline到汇编里面,-d(-D)只能反汇编
- 不用c++filt标准库的符号很难看,
avatar
A*e
12
这结果还是看不出哪个ctor被调用啊。
我最后用土办法,带花括号和不带花括号的版本分别编译,比较生成的目标文件,结果
是一样的。
疑问:set(v.begin(), v.end())和set({v.begin(), v.end()})为何是一回
事呢?
第二个到底是怎么编译的?

【在 s*****t 的大作中提到】
: 1:g++ -std=c++11 -g -o test test.cpp
: 2: objdump -S test |c++filt | less
: 找到你想找的函数(main)然后看看的call,结果大概是这个样子:
: http://pastebin.com/Xr9p4DcC
: 补充:
: - objdump :-S能够把代码 inline到汇编里面,-d(-D)只能反汇编
: - 不用c++filt标准库的符号很难看,

avatar
g*e
13
这些都是C11新加的写法吧 语法糖而已

【在 A*******e 的大作中提到】
: 这结果还是看不出哪个ctor被调用啊。
: 我最后用土办法,带花括号和不带花括号的版本分别编译,比较生成的目标文件,结果
: 是一样的。
: 疑问:set(v.begin(), v.end())和set({v.begin(), v.end()})为何是一回
: 事呢?
: 第二个到底是怎么编译的?

avatar
l*s
14
还是不懂。

【在 g*********e 的大作中提到】
: 这些都是C11新加的写法吧 语法糖而已
avatar
d*i
15
应该坚决反对s2的这种写法,根据manpage:
http://www.cplusplus.com/reference/set/set/set/
set s1(v.begin(), v.end());
就是用的两个iterator[first, last)的用法,清晰简单明了。而s2的话违反了数学上
定义一个集合的基本notation,就是一个集合应该写成
A = {a1, a2, ...., a_N}
而s2显然是混为一谈,把{}作为两个iterator的起点和终点来初始化定义了,这个和数
学的notation完全相背。所以s2是完全错误的用法。

【在 A*******e 的大作中提到】
: vector v = {4, 3, 2, 1}
: set s1(v.begin(), v.end());
: set s2({v.begin(), v.end()});
: s1/s2的初始化都可以编译通过。s2没有必要,但s2到底调用了哪些ctor呢?

avatar
n*n
16
s1是调用range ctor
set s3{v.begin(), v.end()}也是调用range ctor,但是通过uniform initialization。
s2就看不懂了。花括号调用range ctor,圆括号调用copy ctor,然后来个copy
ellision?

【在 d****i 的大作中提到】
: 应该坚决反对s2的这种写法,根据manpage:
: http://www.cplusplus.com/reference/set/set/set/
: set s1(v.begin(), v.end());
: 就是用的两个iterator[first, last)的用法,清晰简单明了。而s2的话违反了数学上
: 定义一个集合的基本notation,就是一个集合应该写成
: A = {a1, a2, ...., a_N}
: 而s2显然是混为一谈,把{}作为两个iterator的起点和终点来初始化定义了,这个和数
: 学的notation完全相背。所以s2是完全错误的用法。

avatar
l*s
17
别扯没用的,说说为啥s2能work吧,偶也很好奇。

【在 d****i 的大作中提到】
: 应该坚决反对s2的这种写法,根据manpage:
: http://www.cplusplus.com/reference/set/set/set/
: set s1(v.begin(), v.end());
: 就是用的两个iterator[first, last)的用法,清晰简单明了。而s2的话违反了数学上
: 定义一个集合的基本notation,就是一个集合应该写成
: A = {a1, a2, ...., a_N}
: 而s2显然是混为一谈,把{}作为两个iterator的起点和终点来初始化定义了,这个和数
: 学的notation完全相背。所以s2是完全错误的用法。

avatar
d*i
18
这不是有用没用的问题,是基本原则问题。set的构造函数并没有这样的转意,直接用
range constructor两个iterator非常简单清楚,为什么要去画蛇添足的绕?

【在 l*********s 的大作中提到】
: 别扯没用的,说说为啥s2能work吧,偶也很好奇。
avatar
l*s
19
curiosity is a cardinal virtue for programmers. There is a mystery, do you
want to figure it out, don't you?

【在 d****i 的大作中提到】
: 这不是有用没用的问题,是基本原则问题。set的构造函数并没有这样的转意,直接用
: range constructor两个iterator非常简单清楚,为什么要去画蛇添足的绕?

avatar
d*i
20
Remember: Simple Is Beautiful. Using s2 is a bad example of violating this
principle.

【在 l*********s 的大作中提到】
: curiosity is a cardinal virtue for programmers. There is a mystery, do you
: want to figure it out, don't you?

avatar
n*n
21
我想讨论的本意并非是最佳实践,而是对C++11和编译器的理解。没有人会写s2吧。

【在 d****i 的大作中提到】
: 这不是有用没用的问题,是基本原则问题。set的构造函数并没有这样的转意,直接用
: range constructor两个iterator非常简单清楚,为什么要去画蛇添足的绕?

avatar
n*n
22
一楼已经说了,s2没有必要。你是说,既然没有必要这么写,就没必要搞清楚为何编译
通过吗?我倒觉得这些生僻写法的讨论能帮助理解C++

【在 d****i 的大作中提到】
: Remember: Simple Is Beautiful. Using s2 is a bad example of violating this
: principle.

avatar
s*t
25
我觉得不看规范去猜也讨论不出什么结果,既然gcc和clang都认就大概能说明这个行为
是标准定义了的,翻到规范的8.5.1看看语法定义:
initializer:
brace-or-equal-initializer
( expression-list )
brace-or-equal-initializer:
= initializer-clause
braced-init-list
initializer-clause:
assignment-expression
braced-init-list
initializer-list:
initializer-clause ...opt
initializer-list , initializer-clause ...opt
braced-init-list:
{ initializer-list ,opt }
{}
可以看到{}内的东西最后就是initializer-list,opt
语义定义在202页,if otherwise包围的地方这么说的:
If the destination type is a (possibly cv-qualified) class type:
If...
Otherwise ,user-defined conversion sequences that can convert from the
source type to the destination type or (when a conversion function is used)
to a derived class thereof are enumerated as described in 13.3.1.4, and the
best one is chosen through overload resolution ,The function selected is
called with the initializer expression as its argument; if the function is a
constructor, the call initializes a temporary of the cv-unqualified version
of the destination type. The temporary is a prvalue
这样解释了为什么s2调用了和s1一样的constructor
avatar
n*n
26
没看懂怎么解释了。这里的要点是overloading resolution,以及为何解析到range
ctor

【在 s*****t 的大作中提到】
: 我觉得不看规范去猜也讨论不出什么结果,既然gcc和clang都认就大概能说明这个行为
: 是标准定义了的,翻到规范的8.5.1看看语法定义:
: initializer:
: brace-or-equal-initializer
: ( expression-list )
: brace-or-equal-initializer:
: = initializer-clause
: braced-init-list
: initializer-clause:
: assignment-expression

avatar
n*n
27
cppreference.com说的很清楚。

【在 n******n 的大作中提到】
: 没看懂怎么解释了。这里的要点是overloading resolution,以及为何解析到range
: ctor

avatar
g*e
28
应该是c11编译器提供的convenient method吧

【在 A*******e 的大作中提到】
: 这结果还是看不出哪个ctor被调用啊。
: 我最后用土办法,带花括号和不带花括号的版本分别编译,比较生成的目标文件,结果
: 是一样的。
: 疑问:set(v.begin(), v.end())和set({v.begin(), v.end()})为何是一回
: 事呢?
: 第二个到底是怎么编译的?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。