কোনটি দ্রুত সম্পাদন করবে, যদি (পতাকা == 0) বা (0 == পতাকা)?


111

সাক্ষাত্কারের প্রশ্ন: কোনটি দ্রুত সম্পাদন করবে, if (flag==0)বা if (0==flag)? কেন?


330
বোকা সাক্ষাত্কার প্রশ্নের জন্য মনোনীত। এবং একটি কঠোর প্রতিযোগিতা আছে।
কনরাড রুডল্ফ

119
আপনি: একটি পরিস্থিতির নাম দিন যেখানে এই দুজনের মধ্যে পার্থক্য সম্ভবত বিরক্ত করার উপযুক্ত হতে পারে। সাক্ষাত্কার: ঠিক আছে, আপনি ভাড়া করেছেন।
ক্রিস লুটজ

37
উভয়ের মধ্যে একমাত্র পার্থক্য হ'ল পরবর্তী সম্মেলনের মাধ্যমে আপনি if(flag = 0)কিছুটা পঠনযোগ্যতার দামের মতো বাগগুলির বিরুদ্ধে বীমা হয়ে উঠছেন।
আমারঘোষ

22
@ অমরঘোষ: আপনার কোডটি পড়ার জন্য কঠোর এবং মূল্যহীন cost আপনার কম্পাইলার সতর্কতাগুলি, উইন-উইন চালু করে প্রাক্তনটিকে ব্যবহার করুন।
GManNickG

129
একবার একটি সংকলক লেখক তাঁর সাক্ষাত্কারে এটি পেয়েছিলেন। তিনি জবাবে ফিসফিস, "যা এক করতে আপনি দ্রুত হতে চান?"।

উত্তর:


236

আমি এখনও কোনও সঠিক উত্তর দেখতে পাইনি (এবং ইতিমধ্যে কিছু রয়েছে) সতর্কতা: নওয়াজ ব্যবহারকারী-সংজ্ঞায়িত ফাঁদটি নির্দেশ করেছেন । এবং আমি আমার তাড়াহুড়োয় "বোকামি প্রশ্ন" -এর উপরে উত্সাহিত হওয়ার জন্য আফসোস করছি কারণ মনে হচ্ছে যে অনেকেই এটি সঠিকভাবে পায় নি এবং এটি সংকলক অপ্টিমাইজেশনে একটি সুন্দর আলোচনার সুযোগ দেয় :)

উত্তরটা হচ্ছে:

কি flag'র ধরনের?

ক্ষেত্রে যেখানে flagপ্রকৃতপক্ষে একটি ব্যবহারকারী সংজ্ঞায়িত টাইপ। তারপরে এটি নির্ভর করে যে কোনটির ওভারলোড operator==নির্বাচন করা হয়েছে। অবশ্যই এটি নির্বোধ বলে মনে হতে পারে যে তারা প্রতিসম হবে না, তবে এটি অবশ্যই অনুমোদিত, এবং আমি অন্য গালিগুলি ইতিমধ্যে দেখেছি।

যদি flagঅন্তর্নির্মিত হয় তবে উভয়ের একই গতি নেওয়া উচিত।

থেকে Wikipedia নিবন্ধটি উপর x86, আমি একটি জন্য বাজি ধরে বলতে পারি চাই Jxxজন্য নির্দেশ ifবিবৃতি: সম্ভবত একটি JNZ(ঝাঁপ দাও যদি না জিরো) অথবা কিছু সমতুল্য।

আমি সন্দেহ করি যে সংকলকটি যেমন অপটিমাইজেশন বন্ধ করেও এমন একটি সুস্পষ্ট অপ্টিমাইজেশন মিস করে। এটি সেই ধরণের জিনিস যার জন্য পিফোল অপটিমাইজেশন ডিজাইন করা হয়েছে।

সম্পাদনা করুন: আবার প্রসারিত হোন, তাই আসুন কিছু সমাবেশ যুক্ত করুন (এলএলভিএম ২.7 আইআর)

int regular(int c) {
  if (c == 0) { return 0; }
  return 1;
}

int yoda(int c) {
  if (0 == c) { return 0; }
  return 1;
}

define i32 @regular(i32 %c) nounwind readnone {
entry:
  %not. = icmp ne i32 %c, 0                       ; <i1> [#uses=1]
  %.0 = zext i1 %not. to i32                      ; <i32> [#uses=1]
  ret i32 %.0
}

define i32 @yoda(i32 %c) nounwind readnone {
entry:
  %not. = icmp ne i32 %c, 0                       ; <i1> [#uses=1]
  %.0 = zext i1 %not. to i32                      ; <i32> [#uses=1]
  ret i32 %.0
}

এমনকি যদি কেউ আইআর পড়তে না জানে তবে আমি মনে করি এটি স্ব-বর্ণনামূলক।


4
@ ম্যাথিউ: আপনি বলেছিলেন আমি এখনও কোনও সঠিক উত্তর দেখিনি .. তবে আমার সঠিক, আমি মনে করি: পি
নওয়াজ

7
ভাল! আপনার উত্তর সম্ভাব্য "বোকামি প্রশ্ন" "" কৌশল / গড় থেকে "পরিণত করে। "আসুন আমরা প্রার্থীর জন্য একটি গর্ত খনন করি এবং দেখি যে সে এতে পড়ে কিনা ..." :) আমি অনুমান করি আমরা সবাই স্বয়ংক্রিয়ভাবে ধরে নিই যে এটি flagঅবশ্যই পূর্ণসংখ্যা বা বুলিয়ান হতে হবে। ওটিওএইচ, flagব্যবহারকারী-সংজ্ঞায়িত টাইপের একটি ভেরিয়েবল থাকা নিজের পক্ষে একেবারেই ভুল, আইএমএইচও
ডাভকা

@Nawaz: আমি আপনার উত্তরের বিষয়ে শেষ অনুচ্ছেদ এড়ানো হতে পারে: P
Matthieu এম

1
@ নাওয়াজ: আমি আসলে দৌড়াদৌড়ি করি না, আমি সাধারণত প্রশ্নগুলি উত্তর হওয়ার পরে অনেক পরে পড়ে থাকি এবং লোকেরা কেবল প্রথম সর্বাধিক উত্সাহিত উত্তরগুলি পড়ার প্রবণতা দেখায় :) তবে আমি আসলে সংকলক অনুকূলিতকরণগুলিতে স্টাফ পড়ছি, এবং এটি আমাকে এক হিসাবে আঘাত করেছে তুচ্ছ অপ্টিমাইজেশনের সাধারণ ক্ষেত্রে তাই আমি ভেবেছিলাম যে আমি তাদের পাঠকদের জন্য এটি নির্দেশ করব যাঁরা প্রকৃতপক্ষে বিরক্ত হন ... আমি বেশ অবাক হয়েছি আসলে আমি অনেকগুলি উত্সাহ পেয়েছি। এখন এটি আমার সর্বাধিক ভোট দেওয়া উত্তর যদিও আমি অবশ্যই সবচেয়ে বেশি চেষ্টা করেছি তা নয়: / যাই হোক আমি আমার উত্তরটি সম্পাদনা করে আমার বক্তব্য সংশোধন করেছি :)
ম্যাথিউ এম এম

2
@ এমআর_এক্লেয়ার: একটি অন্তর্নির্মিত প্রকারটি ভাষাতে অন্তর্নির্মিত (নাম অনুসারে) অন্তর্ভুক্ত a অর্থাৎ এটি একক #includeনির্দেশ ছাড়াই উপলব্ধ । সরলতা দোহাই জন্য, এটি সাধারণত পরিমাণ int, char, boolকথা বলা ইত্যাদি। অন্যান্য সমস্ত ধরনের, ব্যবহারকারী-সংজ্ঞায়িত হতে বলেন হয় যে, তারা কোন অস্তিত্ব কারণ তারা তাদের ঘোষণা কিছু ব্যবহারকারী ফল: typedef, enum, struct, class। উদাহরণস্বরূপ, std::stringব্যবহারকারী সংজ্ঞায়িত করা হয়, যদিও আপনি অবশ্যই এটা নিজেকে :) সংজ্ঞায়িত করা
Matthieu এম

56

জিডিসি ৪.১.২ সহ এমডি 64 এর জন্য একই কোড:

        .loc 1 4 0  # int f = argc;
        movl    -20(%rbp), %eax
        movl    %eax, -4(%rbp)
        .loc 1 6 0 # if( f == 0 ) {
        cmpl    $0, -4(%rbp)
        jne     .L2
        .loc 1 7 0 # return 0;
        movl    $0, -36(%rbp)
        jmp     .L4
        .loc 1 8 0 # }
 .L2:
        .loc 1 10 0 # if( 0 == f ) {
        cmpl    $0, -4(%rbp)
        jne     .L5
        .loc 1 11 0 # return 1;
        movl    $1, -36(%rbp)
        jmp     .L4
        .loc 1 12 0 # }
 .L5:
        .loc 1 14 0 # return 2;
        movl    $2, -36(%rbp)
 .L4:
        movl    -36(%rbp), %eax
        .loc 1 15 0 # }
        leave
        ret

18
সংকলক অপটিমাইজেশন একইরূপে প্রমাণ করতে অতিরিক্ত মাইল যাওয়ার জন্য +1।
কে রে

56

আপনার সংস্করণে কোনও পার্থক্য থাকবে না।

আমি ধরে নিচ্ছি যে typeপতাকাটির পতাকা ব্যবহারকারী-সংজ্ঞায়িত প্রকার নয়, বরং এটি কিছু বিল্ট-ইন টাইপ। এনাম ব্যতিক্রম! । আপনি এনামটিকে বিল্ট ইন হিসাবে ব্যবহার করতে পারেন। আসলে, এটির মানগুলি অন্তর্নির্মিত এক ধরণের!

সেক্ষেত্রে, যদি এটি ব্যবহারকারী-সংজ্ঞায়িত প্রকার (বাদে enum) থাকে তবে উত্তরটি সম্পূর্ণরূপে নির্ভর করে যে আপনি কীভাবে অপারেটরটিকে ওভারলোড করেছেন ==। নোট করুন যে আপনি ==দুটি ফাংশন সংজ্ঞায়িত করে আপনার ওভারলোড করতে হবে, আপনার প্রতিটি সংস্করণের জন্য একটি!


8
এই প্রশ্নটি করার একমাত্র সম্ভাব্য কারণ হতে পারে, আইএমএইচও
ডাভকা

15
আধুনিক সংকলকগণ যদি এরূপ সুস্পষ্ট অপ্টিমাইজেশন মিস করে থাকে তবে আমি অত্যন্ত অবাক হব।
পেড্রো ডি একুইনো

3
আমার জ্ঞান ! সামান্য দিকের ক্রিয়াকলাপ নয়
জাভিয়ের কমবেল

8
@ নাওয়াজ: কম দেননি তবে আপনার উত্তরটি সত্যই ভুল এবং এটি ভয়াবহ যে এটি এখনও অনেকগুলি উত্সাহ পেয়েছে। রেকর্ডের জন্য, একটি পূর্ণসংখ্যার সাথে 0 এর সাথে তুলনা করা একক সমাবেশ নির্দেশ , সম্পূর্ণরূপে উপেক্ষার সাথে সমান। প্রকৃতপক্ষে, সংকলকটি যদি কিছুটা বোকা হয় তবে এটি উপেক্ষার চেয়েও দ্রুত হতে পারে (যদিও এটি সম্ভবত নয়)।
কনরাড রুডল্ফ

6
@ নাওয়াজ: এটি এখনও বলা যায় যে এটি দ্রুত, হতে পারে, বা সাধারণত হয়ে যায়, এটি হতে পারে। যদি কোনও পার্থক্য থাকে, তবে "শূন্যের তুলনায়" সংস্করণটি দ্রুততর হবে, যেহেতু প্রত্যাখ্যানটি সত্যিকার অর্থে দুটি ক্রিয়াকলাপে অনুবাদ হয়: "অপারেটকে নাচান; পরীক্ষা করুন যে ফলাফলটি ননজারো"। বাস্তবে, অবশ্যই, সংকলকটি প্লেইন "শূন্যের সাথে তুলনা করুন" সংস্করণ হিসাবে একই কোডটি উত্সাহিত করতে অপ্টিমাইজ করে তবে অপ্টিমাইজেশনটিকে নাগরিষ্ঠ সংস্করণে প্রয়োগ করা হচ্ছে, এটি অন্যরকমভাবে নয় not কনরাড ঠিক বলেছেন।
জলফ

27

একেবারে কোনও পার্থক্য নেই।

অ্যাসাইনমেন্ট / তুলনা টাইপগুলি বাদ দেওয়ার বিষয়ে উল্লেখ করে আপনি এই সাক্ষাত্কার প্রশ্নের উত্তর দেওয়ার ক্ষেত্রে পয়েন্ট অর্জন করতে পারেন, যদিও:

if (flag = 0)  // typo here
   {
   // code never executes
   }

if (0 = flag) // typo and syntactic error -> compiler complains
   {
   // ...
   }

যদিও এটি সত্য, উদাহরণস্বরূপ সি-সংকলক প্রাক্তন ( flag = 0) এর ক্ষেত্রে সতর্ক করে দেয় , পিএইচপি, পার্ল বা জাভাস্ক্রিপ্ট বা তেমন কোনও সতর্কতা নেই <insert language here>


নিবন্ধন করুন আমি অবশ্যই "যথাযথ" ব্র্যাকিং শৈলীর বর্ণনা মেটাতে পোস্টটি মিস করেছি ।
লিনাস ক্লিন

7
আমি মোটেও ভোট দিইনি, তবে এটির মূল্যের জন্য: কেন এত গুরুত্বপূর্ণ যে লোকেরা যখনই ভোট দেয় তারা নিজেরাই ব্যাখ্যা করে? ভোটগুলি ডিজাইন অনুসারে বেনামে। আমি ডাউনভোটাররা সর্বদা মন্তব্য করা উচিত এই ধারণার সম্পূর্ণ বিরোধিতা করছি, কারণ আমি ব্যক্তিগতভাবে কখনই ডাউনভাইটার হিসাবে ধরে নেওয়া চাই না কারণ আমি কোনও সমস্যা দেখিয়ে একটি মন্তব্য রেখেছি। সম্ভবত ডাউনওয়টার ভেবেছিল উত্তরটির বেশিরভাগ উত্তর গতির প্রশ্নের সাথে অপ্রাসঙ্গিক? সম্ভবত তিনি ভেবেছিলেন যে এটি কোনও কোডিং শৈলীর উত্সাহ দেয় যা তিনি অনুমোদন করেননি? সম্ভবত তিনি ডিক ছিলেন এবং তার নিজের উত্তরটি সর্বোচ্চ রেটিং পেতে চান?
ডেভিড হেডলুন্ড

3
জনগণ নির্বিশেষে কারণ নির্বিশেষে তাদের ভোট দেওয়ার মত ভোট দিতে হবে। সম্মানন অনুসারে, এটি প্রায়শই একটি ভাল জিনিস কারণ এটি প্রায়শই অন্যান্য লোকদের উর্ধ্বতনকে, অনির্বাচিত ডাউনভোটের বিরুদ্ধে লড়াই করতে উত্সাহিত করে, যখন বাস্তবে, একটি একক উর্ধ্বতন পাঁচটি অনুন্নত ডাউনভোট বাতিল করে দেয়।
ডেভিড হেডলুন্ড

26
@ ডেভিড: ডাউনভোটারদের নিজের ব্যাখ্যা করা উচিত কারণ এই সাইটটি গোপন জনপ্রিয়তার ব্যালট, বেনামে ভোটদান বা এই জাতীয় পছন্দ সম্পর্কে নয়। এই সাইটটি শেখার বিষয়ে। যদি কেউ বলে যে কোনও প্রতিক্রিয়াটিকে নীচে চাপিয়ে দেওয়ার মাধ্যমে এটি ভুল, তবে ডাউনভোটার তাদের জ্ঞান নিয়ে স্বার্থপর হচ্ছে যদি তারা তা ব্যাখ্যা না করে। তারা যখন সঠিক হয় তার জন্য সমস্ত ক্রেডিট নিতে ইচ্ছুক, তবে অন্যেরা ভুল হলে জ্ঞান ভাগ করতে রাজি নয়।
জন ডিবলিং

1
কেবল বন্ধনী স্টাইল ইস্যুটি এড়িয়ে যাওয়ার জন্য, আমি সত্যিই মনে করি ম্যাথিউইউ একটি রসিকতা হিসাবে এটি উদ্দেশ্য করে। আমি অবাক হয়ে দেখেছি যে এই জাতীয় সমস্যার উপর নির্ভর করে যে কেউ তাদের ভোট দেয়। এটি বলার পরেও, সবাই ভোটগুলি ঠিক একই পদ্ধতিতে ব্যবহার করে না। ডাউনভোটিংয়ের যুক্তিটি আমি দেখতে পেলাম কারণ পোস্টটি মনে হচ্ছে কোনও কোডিং শৈলীর পক্ষে ভোটার প্রত্যাখ্যান করতে পারে ( কোনও কোডিং শৈলীর পক্ষে পার্থক্য মনে রাখবেন - "আপনি যদি আপনার কোডটি এভাবে লিখেন তবে আপনি সংকলক ত্রুটি পেয়ে যাবেন এই টাইপো "- কেবল ব্যবহার যেমন ধনুর্বন্ধনী, একটি কোডিং শৈলী) যে ইন ...
ডেভিড Hedlund

16

গতি-ভিত্তিতে একেবারে কোনও পার্থক্য থাকবে না। কেন সেখানে থাকতে হবে?


7
সংকলক সম্পূর্ণরূপে retarded ছিল। এটাই একমাত্র কারণ।
জেরেমিপ

@ জেরেমিপি: সংকলকটি পিছিয়ে থাকলেও আমি কোনও পার্থক্য কল্পনা করতে পারি না। সংকলক লেখক যতদূর আমি বলতে পারি উদ্দেশ্য হিসাবে এটি করতে হবে।
জন

2
ধরে নিচ্ছি প্রসেসরের একটি "পরীক্ষা যদি 0" নির্দেশনা রয়েছে x == 0তবে এটি ব্যবহার করতে পারে তবে 0 == xসাধারণ তুলনা ব্যবহার করতে পারে। আমি বলেছিলাম এটি প্রতিহত করতে হবে।
জেরেমিপ

8
অপারেটরের
অ্যাসিমেট্রিক

আমরা কারণ পারে আছে virtual operator==(int)একটি ব্যবহারকারী-সংজ্ঞায়িত ধরনের?
লোরো

12

ওয়েল একটি ব্যবহারকারী সংজ্ঞায়িত টাইপ হয় যখন পার্থক্য আছে

struct sInt
{
    sInt( int i ) : wrappedInt(i)
    {
        std::cout << "ctor called" << std::endl;
    }

    operator int()
    {
        std::cout << "operator int()" << std::endl;
        return wrappedInt;
    }

    bool operator==(int nComp)
    {
        std::cout << "bool operator==(int nComp)" << std::endl;
        return (nComp == wrappedInt);
    }

    int wrappedInt;
};

int 
_tmain(int argc, _TCHAR* argv[])
{
    sInt s(0);

    //in this case this will probably be faster
    if ( 0 == s )
    {
        std::cout << "equal" << std::endl;
    }

    if ( s == 0 )
    {
        std::cout << "equal" << std::endl;
    }
}

প্রথম ক্ষেত্রে (0 == গুলি) রূপান্তরকারী অপারেটরকে ডাকা হয় এবং তারপরে ফিরে আসা ফলাফলটিকে 0 এর সাথে তুলনা করা হয় the দ্বিতীয় ক্ষেত্রে == অপারেটরকে ডাকা হয়।


3
একটি রূপান্তরকারী অপারেটর অপারেটর হিসাবে হিসাবে প্রাসঙ্গিক হতে পারে হিসাবে উল্লেখ ==।
টনি দেলরোয়

11

সন্দেহ যখন এটি মানদণ্ড এবং সত্য শিখুন।


2
বেঞ্চমার্কিংয়ে কী ভুল? কখনও কখনও অনুশীলনটি আপনাকে তত্ত্বের চেয়ে আরও বেশি কিছু বলছে
এলজো ভালুগি

1
আমি এই থ্রেডটি পড়া শুরু করার সময় আমি উত্তরটি খুঁজছিলাম। দেখে মনে হচ্ছে যে অনুশীলন চেয়ে তত্ত্বটি আরও আবেদনময়ী, উত্তরগুলি এবং উত্তরগুলি লক্ষ্য করে :)
স্যামুয়েল রিভাস

তিনি কিভাবে সাক্ষাত্কারে বেঞ্চমার্ক করতে পারেন? প্লাস আমি মনে করি সাক্ষাত্কারকারক এমনকি বেঞ্চমার্কিংয়ের অর্থ কী তাও জানেন না, তাই তিনি ক্ষোভ প্রকাশ করতে পারতেন।
আইএডাপ্টার

প্রশ্নের সঠিক উত্তর (আইএমও) হ'ল "এটি প্রায়শই সংকলক এবং প্রোগ্রামের বাকী অংশের উপর নির্ভর করে I'd আমি একটি বেঞ্চমার্ক লিখি এবং এটি 5 মিনিটের মধ্যে পরীক্ষা করে দেখি"
স্যামুয়েল রিভাস

7

গতির দিক থেকে এগুলি একই রকম হওয়া উচিত।

তবে খেয়াল করুন যে কিছু লোক সমতা তুলনা (তথাকথিত "যোদা শর্তাদি") বাম দিকে স্থির রাখতে ব্যবহার করতে পারে এমন সমস্ত ত্রুটিগুলি এড়ানোর জন্য যা যদি আপনি (সমতা তুলনা অপারেটর) =পরিবর্তে লিখেন (অ্যাসাইনমেন্ট ==অপারেটর); যেহেতু একটি আক্ষরিক অর্পণ করা একটি সংকলন ত্রুটি ট্রিগার করে, এই ধরণের ভুল এড়ানো হয়।

if(flag=0) // <--- typo: = instead of ==; flag is now set to 0
{
    // this is never executed
}

if(0=flag) // <--- compiler error, cannot assign value to literal
{

}

অন্যদিকে, বেশিরভাগ লোকেরা "ইয়োদা শর্তসাপেক্ষ" অদ্ভুত চেহারা এবং বিরক্তিকর বলে মনে করেন, বিশেষত যেহেতু তারা যে ত্রুটিগুলি প্রতিরোধ করে তাদের ক্লাসটি পর্যাপ্ত সংকলক সতর্কতা ব্যবহার করেও চিহ্নিত করা যেতে পারে।

if(flag=0) // <--- warning: assignment in conditional expression
{

}

প্রতিধ্বনির জন্য ধন্যবাদ দ্রষ্টব্য, যদিও, পিএইচপি উদাহরণস্বরূপ শর্তসাপেক্ষে অ্যাসাইনমেন্টের ক্ষেত্রে সতর্ক করবে না।
লিনাস ক্লিন

5

অন্যরা যেমন বলেছে, তেমন কোনও পার্থক্য নেই।

0মূল্যায়ন করতে হবে। flagমূল্যায়ন করতে হবে। এই প্রক্রিয়াটি একই সময় নেয়, তারা যে দিকে রাখে তা নির্বিশেষে।

সঠিক উত্তরটি হবে: তারা উভয়ই একই গতি।

এমনকি এক্সপ্রেশন if(flag==0)এবং if(0==flag)একই পরিমাণে অক্ষর রয়েছে! তাদের মধ্যে যদি কোনওটির মতো লেখা থাকে if(flag== 0)তবে সংকলকটির পার্স করার জন্য একটি অতিরিক্ত জায়গা থাকতে পারে, সুতরাং সংকলনের সময়কে নির্দেশ করার ক্ষেত্রে আপনার বৈধ কারণ থাকতে পারে।

তবে যেহেতু এ জাতীয় কোনও জিনিস নেই তাই একে অপরের চেয়ে দ্রুত হওয়া উচিত এমন কোনও কারণ নেই। যদি কোনও কারণ থাকে, তবে সংকলকটি উত্পন্ন কোডটিতে কিছু খুব খুব অদ্ভুত কাজ করছে ...


5

কোনটির দ্রুত নির্ভর করে আপনি কোন সংস্করণ == ব্যবহার করছেন তার উপর। এখানে একটি স্নিপেট রয়েছে যা == এর 2 টি সম্ভাব্য বাস্তবায়ন ব্যবহার করে এবং আপনি x == 0 বা 0 == x কল করতে চান কিনা তার উপর নির্ভর করে 2 টির মধ্যে একটি বেছে নেওয়া হয়েছে।

আপনি যদি কেবল একটি পড ব্যবহার করছেন তবে গতির দিকে আসার পরে এ বিষয়টির আসলেই কিছু উচিত নয়।

#include <iostream>
using namespace std;

class x { 
  public:
  bool operator==(int x) { cout << "hello\n"; return 0; }
  friend bool operator==(int x, const x& a) { cout << "world\n"; return 0; } 
};

int main()
{ 
   x x1;
   //int m = 0;
   int k = (x1 == 0);
   int j = (0 == x1);
}

5

ব্যস, ব্যায়ামের জন্য, আমি ওপিকে দেওয়া মন্তব্যে সকলের সাথে একমত হয়েছি:

সংকলকটি যদি যথেষ্ট পরিমাণে চালাক না হয় (প্রকৃতপক্ষে আপনার এটি ব্যবহার করা উচিত নয়) বা অপ্টিমাইজেশন অক্ষম থাকে, x == 0কোনও স্থানীয় সমাবেশ jump if zeroনির্দেশকে সংকলন করতে 0 == xপারে , এবং সংখ্যাসূচক মানের তুলনায় আরও জেনেরিক (এবং ব্যয়বহুল) হতে পারে।

তবুও, আমি এমন কোনও বসের পক্ষে কাজ করতে চাই না যারা এই শর্তাবলী বিবেচনা করে ...


4

মৃত্যুদন্ডের গতির ক্ষেত্রে অবশ্যই কোনও পার্থক্য নেই। উভয় ক্ষেত্রে একইভাবে শর্তটি মূল্যায়ন করা দরকার।


3

আমি মনে করি সেরা উত্তরটি "এই ভাষাটি কোন ভাষায়?"

প্রশ্নটি ভাষাটি নির্দিষ্ট করে না এবং এটি 'সি' এবং 'সি ++' উভয়ই ট্যাগ করে। একটি সুনির্দিষ্ট উত্তরের আরও তথ্যের প্রয়োজন।

এটি একটি লম্পট প্রোগ্রামিং প্রশ্ন, তবে এটি "বিভ্রান্তিকর্তাকে" নিজেকে ফাঁসিয়ে দেওয়া বা গাছের দোল তৈরির "বিভাগটি তৈরি করার পর্যাপ্ত দড়ি দেওয়া উচিত the এই ধরণের প্রশ্নগুলির সমস্যাটি হ'ল তারা সাধারণত লিখিত হয়ে যায় এবং সাক্ষাত্কারকারীর কাছে সাক্ষাত্কারকারীর হাতে তুলে দেওয়া হয় যতক্ষণ না এটি এমন লোকেদের হাতে না আসে যারা সত্যিকার অর্থে সমস্ত কোণ থেকে বোঝে না।


3

প্রস্তাবিত উপায়গুলি ব্যবহার করে দুটি সাধারণ প্রোগ্রাম তৈরি করুন।

কোডগুলি জমা দিন। সমাবেশ দেখুন এবং আপনি বিচার করতে পারেন, কিন্তু আমি সন্দেহ আছে যে একটি পার্থক্য আছে!

সাক্ষাত্কারগুলি আগের চেয়ে কম হচ্ছে।


2

ঠিক একদিকে যেমন (আমি আসলেই মনে করি যে কোনও শালীন সংকলক এই প্রশ্নটিকে মোটা করে দেবে, যেহেতু এটি অপ্টিমাইজ করবে) 0 == ফ্ল্যাগের ওপরে পতাকা ব্যবহার করে == 0 টাইপোকে আটকাতে পারে যেখানে আপনি = এর মধ্যে কোনওটি ভুলে যান (যেমন আপনি যদি দুর্ঘটনাক্রমে টাইপ করেন তবে পতাকা = 0 এটি সংকলন করবে, তবে 0 = পতাকাটি করবে না), যা আমি মনে করি সবাই এক সময় বা অন্য সময়ে ভুল করেছে ...


0

যদি কিছুতেই কোনও পার্থক্য থাকে, দ্রুত একবার চয়ন করার জন্য কম্পাইলারটি কী থামে? সুতরাং যৌক্তিকভাবে, কোনও পার্থক্য থাকতে পারে না। সম্ভবত এটিই সাক্ষাত্কার প্রত্যাশা করে। এটি আসলে একটি উজ্জ্বল প্রশ্ন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.